类析构函数符号有什么问题?在vc ++中

时间:2011-04-19 13:51:00

标签: c++ class destructor symbols

这是我的代码:

   #include <iostream>
using namespace std;

class new_class{
public:
    new_class();
    float multiplication(){return x*y;}
    ~new_class();
private:
    float x;
    float y;
};

int main()
{   new_class class_11;
    cout<<class_11.multiplication()<<endl;
   system("pause");


   return 0;
}

错误日志:

Main.obj : error LNK2001: unresolved external symbol "public: __thiscall new_class::~new_class(void)" (??1new_class@@QAE@XZ)
Main.obj : error LNK2001: unresolved external symbol "public: __thiscall new_class::new_class(void)" (??0new_class@@QAE@XZ)

我正在使用Visual Studio 2010,visual c ++可以让任何人解释我 我做错了什么?

2 个答案:

答案 0 :(得分:7)

你没有定义你的构造函数或析构函数,你刚刚声明了它们。

必须在某处定义程序中使用的任何函数。函数定义包含函数声明及其定义。例如,您的multiplication成员函数已定义:

float multiplication() { return x * y; }
^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^
function declaration   this makes the declaration a definition

“未解析的外部符号”错误意味着编译器找到了函数的声明,但链接器无法找到定义。因此,您需要为链接器指出的两个函数提供定义:默认构造函数和您声明的析构函数。

那就是说,如果你没有声明任何构造函数,编译器将隐式为你的类提供一个默认构造函数,这通常就足够了。如果不声明析构函数,编译器将隐式提供析构函数。因此,除非您确实需要在构造函数或析构函数中执行某些操作,否则您无需自己声明和定义它们。

确保您拥有a good introductory C++ book。这本书将详细介绍如何定义成员函数以及编写构造函数和析构函数的最佳实践(正确编写析构函数充满了危险)。

答案 1 :(得分:4)

你应该实现析构函数,你刚刚声明了它