Что не так с символом деструктора класса?в vc ++ - PullRequest
1 голос
/ 19 апреля 2011

Вот мой код:

   #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 2010Visual C ++ может кто-нибудь объяснить мне, что я делаю не так?

Ответы [ 2 ]

7 голосов
/ 19 апреля 2011

Вы не определили вашего конструктора или деструктора, вы только что объявили их.

Любая функция, используемая в вашей программе, должна быть где-то определена. Определение функции состоит из объявления функции, за которым следует ее определение. Например, ваша multiplication функция-член определена:

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

Ошибка «неразрешенный внешний символ» означает, что компилятор нашел объявление функции, но компоновщик не смог найти определение. Итак, вам нужно предоставить определения для двух функций, отмеченных компоновщиком: конструктор по умолчанию и деструктор, который вы объявили.

Тем не менее, обратите внимание, что если вы не объявляете никаких конструкторов, компилятор неявно предоставит конструктор по умолчанию для вашего класса, чего часто достаточно. Если вы не объявите деструктор, компилятор неявно предоставит деструктор. Поэтому, если вам действительно не нужно что-то делать в конструкторе или деструкторе, вам не нужно объявлять и определять их самостоятельно.

Убедитесь, что у вас есть хорошая вводная книга по C ++ . В такой книге будет более подробно рассказано о том, как определяются функции-члены, и о лучших практиках написания конструкторов и деструкторов (правильное написание деструктора чревато опасностями).

4 голосов
/ 19 апреля 2011

вы должны реализовать деструктор, вы только что объявили его

...