[英]not declared in this scope c++
我處於c ++項目的中間,並且收到眾所周知的錯誤“未在此范圍內聲明”。 特別是“未在此范圍內聲明vexp”。 如下所示,vexp是在Exploration類中聲明的向量,盡管我已經在主目錄中包含Exploration.h,但vexp無法訪問。 另一方面,Exploration :: vexp是不可接受的,因為vexp不是靜態的。 使vexp靜態化是從main訪問它的唯一方法嗎???
#include "exploration.h"
#include <iostream>
#include <vector>
int main()
{
std::srand (time(NULL));
for(int i=1; i<9; i++)
{
Exploration temp (0,3,3);
vexp.push_back(temp);
}
for(int j=0; j<(int)Exploration::vexp.size(); j++)
{
std::cout << Exploration::vexp[j].Vertical;
std::cout << Exploration::vexp[j].Horizontal;
std::cout << Exploration::vexp[j].r;
std::cout << '\n';
}
return 0;
}
和標題:
#ifndef EXPLORATION_H
#define EXPLORATION_H
#include<vehicle.h>
#include <vector>
class Exploration : public vehicle
{
public:
std::vector <Exploration> vexp;
Exploration(bool,float,int);
int r;
void DangerCheck();
bool expaxis(int k);
};
#endif // EXPLORATION_H
vexp
是Exploration
的非靜態成員。 您創建的每個Exploration
對象將具有其自己的vexp
成員。 因此,要訪問vexp
,您需要具有一個Exploration
對象。 也就是說,以下將起作用:
Exploration exp1(false, 3.0f, 5);
Exploration exp2(true, 6.0f, 10);
exp1.vexp.push_back(exp2);
請注意,我訪問vexp
成員exp1
與exp1.vexp
。 那就是屬於那個特定Exploration
對象的向量。 為此,我推exp2
。
您究竟需要做什么,取決於您要做什么,而我不確定。 似乎您沒有完全掌握面向對象的原理。 您應該清楚,由於vexp
是Exploration
的非靜態成員,因此在您創建Exploration
對象之前它不存在。 也就是說, 每個 Exploration
對象擁有一個包含更多Exploration
對象的容器。
似乎您只需要一個不是Exploration
成員的std::vector<Exploration>
。 因此,您只需要一個Exploration
的容器,而不由其他Exploration
擁有。 為此,您只需執行以下操作:
int main()
{
std::srand (time(NULL));
std::vector<Exploration> vexp; // vexp has been moved here
for(int i=1; i<9; i++)
{
Exploration temp (0,3,3);
vexp.push_back(temp);
}
for(int j=0; j < vexp.size(); j++)
{
std::cout << vexp[j].Vertical;
std::cout << vexp[j].Horizontal;
std::cout << vexp[j].r;
std::cout << '\n';
}
}
請注意,現在已將vexp
聲明為main
函數的本地變量,應將其從Exploration
類中刪除。
如果您不想將vexp
設為靜態對象,則必須將vexp
作為Exploration
對象的成員進行訪問。
temp.vexp.push_back(something);
但這似乎並不是您想要的。 在您的情況下,似乎應該將其設置為靜態或全局變量。
vexp
是Exploration
類的成員變量,因此應與Exploration
類的實例一起使用
temp.vexp.push_back(SomeVariable);
但是,不建議將成員變量聲明為public
並像在外部類中那樣使用它。
將vexp
從類中vexp
:
std::vector<Exploration> vexp;
和:
for(int j=0; j<vexp.size(); j++)
{
std::cout << vexp[j].Vertical;
std::cout << vexp[j].Horizontal;
std::cout << vexp[j].r;
std::cout << '\n';
}
vexp
是否打算成為您所有Exploration
的列表? 如果是這樣,則需要在Exploration
類之外聲明它。 然后你可以做你的
Exploration temp (0,3,3);
vexp.push_back(temp);
它應該可以正常工作。
另一方面,如果是作為附加到特定Exploration
的向量,則本節將非常令人困惑:
Exploration temp (0,3,3);
vexp.push_back(temp);
您將需要類似
Exploration myExpl;
for(int i=1; i<9; i++)
{
Exploration temp (0,3,3);
myExpl.vexp.push_back(temp);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.