我说我有课
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;
};
假设我恰当地填充了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
}
所以在我写xxxx
的地方它应该是struct stuff
但是当我这样做时我得到use of undeclared identifier
那么如何让编译器知道stuff
我我指的是A的内部。
答案 0 :(得分:6)
您可以使用scope-operator:
指定完全限定名称A::stuff xxx = a.get_stuff(index);
或者如果您的编译器支持C ++ 11或更高版本,您可以使用auto
关键字并让编译器找出类型:
auto xxx = a.get_stuff(index);
作为旁注:
您的get_stuff
方法甚至不应该编译,因为它试图返回stuff
个对象,nullptr
不是stuff
个对象。
stuff get_stuff(int index){
if(index < vec_stuff.size() && index >= 0) return vec_stuff[index];
else return nullptr;
}
如果它有一个值,因此它是一个例外情况,那么你应该抛出异常。否则,您可以让它返回stuff*
,然后返回&vec_stuff[index]
。