[英]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.