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

问题描述:

我收到了来自我的编译器错误,当我尝试代码这种一般格式为:主初始化成员(其构造函数接受参数)的结构的一类

在classname.hpp

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

的.cpp,我定义一个变量exampleData:

classname::structname exampleData; 

在classname.cpp,我有一个使用exampleData和尝试初始化部件,成员名称,该结构的一个函数:

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

我从我的编译器,说明收到一个错误:

未定义的符号:classname::structname::membername(sometype)“在classname.o从classname::functionname(classname::structname&)引用。 LD:符号(S)没有发现

我认为我的错误在于行

otherclass membername(sometype) 

我还以为这可能是内:

otherclass membername(sometype& a) 

但我收到了同样的错误。

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

+0

你的代码不可能是正确的,缺少大量的分号。修复代码并再次检查。此外,你的函数'functionname'只是你的hpp文件中的一个全局(免费)函数,而不是一个成员函数。 – 2011-06-15 23:16:14

+1

-1没有发布真实代码(例如发布的代码缺少分号)。我们不是传心者。我投票结束,因为这不是一个真正的问题。 – 2011-06-15 23:16:40

+0

-1不发布导致错误的编译器命令。如果这是一个链接器错误,我们应该能够验证您已将所有相关模块链接在一起。 – 2011-06-15 23:32:12

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

+0

我还不清楚。通过提供一个定义(除了class.cpp文件中的函数?)或通过在我的程序中的其他地方提供实现函数名,您是什么意思?谢谢 – 2011-06-15 23:18:50

+0

在''classname'里面的嵌套struct'structname'中,你已经创建了一个名为'membername'的函数。但是,您没有在任何地方提供该函数的实现,这意味着如果您调用函数,则链接器将无法生成有效的程序,因为它无法找到函数时应该执行的代码叫做。实现这个功能将解决这个问题。 – templatetypedef 2011-06-15 23:22:54

+0

这个回答正如你的编译器一样正确:你没有定义'classname :: structname :: membername'(通过你在地球上出现这些怪异名字的方式吗?每个人都知道一个类是称为'Foo' ;-))。说'otherclass membername(sometype){return otherclass; }'或者类似的东西来提供一个框架定义。 – 2011-06-15 23:28:42