2012-02-03 104 views
0

这就是我所得到的。我试图在Bar中使用自定义构造函数创建Foo实例。当我尝试从Bar的构造函数中调用构造函数时,我得到和未解析的外部。无法解析的外部符号“public:class Foo __thiscall Bar :: bu(char const *)”

class Foo 
{ 
public: 
    // The custom constructor I want to use. 
    Foo(const char*); 
}; 

class Bar 
{ 
public: 
    Bar(); 
    //The instance of Foo I want to use being declared. 
    Foo bu(const char*); 
}; 

int main(int argc, char* args[]) 
{ 
    return 0; 
} 

Bar::Bar() 
{ 
    //Trying to call Foo bu's constructor. 
    bu("dasf"); 
} 

Foo::Foo(const char* iLoc) 
{ 
} 
+1

该代码无效。当你添加一个成员变量的时候,当你想使用一个自定义的构造函数时,它将它作为一个指针:Foo * bu;然后在构造函数中创建实例。 – peterept 2012-02-03 06:11:07

+0

这是一个链接器问题。我认为你发布的来源不足以解决你的问题。是否所有内容都在同一个翻译单元(文件)中声明?然后我认为它应该工作。如果没有,你应该编辑源文件,指出哪些文件存储在哪个文件中,并给出完整的编译器和链接器命令行以及相应的输出(在这种情况下不应该那么多)。 – Axel 2012-02-03 06:12:12

+0

@peterept:我认为它是有效的,只是Bar :: bu被声明为返回Foo而不是成员变量的方法。在Bar :: Bar()中,bu方法被调用,返回一个未使用的对象。没有多大意义,但应该工作。 – Axel 2012-02-03 06:15:56

回答

0

这可能是你想要什么:

class Foo 
{ 
public: 
    // The custom constructor I want to use. 
    Foo(const char*); 
}; 

class Bar 
{ 
public: 
    Bar(); 
    //The instance of Foo I want to use being declared. 
    Foo bu; // Member of type Foo 
}; 

int main(int argc, char* args[]) 
{ 
    return 0; 
} 

Bar::Bar() : bu("dasf") // Create instance of type Foo 
{ 
} 

Foo::Foo(const char* iLoc) 
{ 
} 

至于此声明:Foo bu(const char*);这是一个名为bu一个成员函数,它接受一个const char*并返回Foo的声明。未解决的符号错误是因为您从未定义函数bu,但您希望Foo的实例不是函数。

看到评论后,其他方法:

class Foo 
{ 
public: 
    // The custom constructor I want to use. 
    Foo(const char*); 
}; 

class Bar 
{ 
public: 
    Bar(); 
    ~Bar() { delete bu;} // Delete bu 
    //The instance of Foo I want to use being declared. 
    Foo *bu; // Member of type Foo 
}; 

int main(int argc, char* args[]) 
{ 
    return 0; 
} 

Bar::Bar() : bu(new Foo("dasf")) // Create instance of type Foo 
{ 
} 

Foo::Foo(const char* iLoc) 
{ 
} 

而且还有许多其他问题与您的代码,也许得到一本关于C++一样C++ Primer将是一个不错的主意。