如何获取类中的struct?

pok*_*che 1 c++

我想说我上课了

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里面.

Som*_*ken 6

您可以使用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].

  • @GillBates:或"可选"包装器.坦率地抛出异常是一种合理,简单和清晰的方法,无论咒语如何 (2认同)