我想说我上课了
class A{
public:
struct stuff{
int x;
int y;
};
stuff get_stuff(int index){
if(index < vec_stuff.size() && index >= 0) return vec_stuff[index];
else return nullptr;
}
std::vector<stuff> vec_stuff;
};
Run Code Online (Sandbox Code Playgroud)
假设我vec_stuff恰当地填充了这些.
然后在其他一些课堂上
#inclde "A.h"
class B{
public:
B(){}
void f(int index, int k){
xxxx = a.get_stuff(index)
}
A a; // assume A is initialized properly
}
Run Code Online (Sandbox Code Playgroud)
所以在我写xxxx在那里的地方应该是,struct stuff但是当我这样做时,我得到了use of undeclared identifier如何让编译器知道stuff我所指的是在A里面.
您可以使用scope-operator指定完全限定名称:
A::stuff xxx = a.get_stuff(index);
Run Code Online (Sandbox Code Playgroud)
或者,如果您的编译器支持C++ 11或更高版本,您可以使用该auto关键字并让编译器找出类型:
auto xxx = a.get_stuff(index);
Run Code Online (Sandbox Code Playgroud)
作为旁注:
你的get_stuff方法甚至不应该编译,因为它试图返回一个stuff对象,nullptr而不是一个stuff对象.
stuff get_stuff(int index){
if(index < vec_stuff.size() && index >= 0) return vec_stuff[index];
else return nullptr;
}
Run Code Online (Sandbox Code Playgroud)
如果它有一个值,因此它是一个例外情况,那么你应该抛出异常.否则你可以让它返回a stuff*并返回&vec_stuff[index].