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

Initialize Members (whose constructors accept arguments) in a struct in a class

本文关键字:构造函数 参数 结构 成员 初始化      更新时间:2023-10-16

当我尝试使用以下通用格式的代码时,我收到了来自编译器的错误:

在类名.hpp 中

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

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

classname::structname exampleData;

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

void classname::functionname(structname& exampleData){
    sometype a;
    exampleData.membername(a);
}

我收到一个来自我的编译器的错误:

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

我认为我的错误在范围内

otherclass membername(sometype)

我还认为可能是:

otherclass membername(sometype& a)

但我收到了同样的错误。

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

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