在类的结构中初始化成员(其构造函数接受参数)

Tom*_*ght -2 c++ struct initialization class

当我尝试使用这种通用格式的代码时,我收到编译器的错误:

在classname.hpp中

#include "otherclass.hpp"
class classname {
public:
    typedef struct {
        otherclass membername(sometype);
    } structname;
    void functionname(structname& exampleData);
}
Run Code Online (Sandbox Code Playgroud)

在main.cpp中,我定义了一个变量exampleData:

classname::structname exampleData;
Run Code Online (Sandbox Code Playgroud)

在classname.cpp中,我有一个使用exampleData的函数,并尝试初始化struct的成员,membername:

void classname::functionname(structname& exampleData){
    sometype a;
    exampleData.membername(a);
}
Run Code Online (Sandbox Code Playgroud)

我从编译器收到错误说明:

未定义的符号:classname::structname::membername(sometype)" classname::functionname(classname::structname&)在classname.o中引用.ld:符号未找到

我认为我的错误在于线

otherclass membername(sometype)
Run Code Online (Sandbox Code Playgroud)

我还以为它可能是:

otherclass membername(sometype& a)
Run Code Online (Sandbox Code Playgroud)

但我收到了同样的错误.

我想知道这是否合法,在构造函数不是()的类中的结构中有一个成员.在main.cpp中,当我声明exampleData时,membername尚未初始化.这是合法的还是我在错误的地方打猎?

tem*_*def 5

您获得的错误看起来很像由于函数classname::structname::membername未在任何地方定义而导致的链接器错误.从您发布的代码中,看起来您刚刚声明了函数而没有在任何地方提供定义,这意味着代码将编译但不会链接.您应该能够通过在程序中的某个位置提供函数的实现来解决此问题.它与参数是否通过引用无关; 在这两种情况下,您仍然需要提供实现.