Я новичок в более крупных концепциях C++ и пытаюсь написать небольшую программу для проверки поведения конструкторов и деконструкторов. Однако я не могу заставить программу скомпилироваться из-за глупых ошибок в отношении неопределенных ссылок на myClass :: myClass или неспособности напрямую вызвать конструктор.C++ Вызов конструктора для класса
Мой код как таковой:
myClass.h:
#pragma once
class myClass{
int x;
public:
myClass(int n_x);
myClass();
~myClass();
};
myClass.cpp:
#include <string>
#include "myClass.h"
myClass(int n_x)
:x(n_x)
{
// constructor
std::cout << "A myClass object was created! And x == " << x << "!" << std::endl;
}
myClass()
:x(10)
{
// default constructor
std::cout << "A myClass object was created! And x == " << x << "!" << std::endl;
}
~myClass()
{
// deconstructor
std::cout << "A myClass object was destroyed!" << std::endl;
}
main.cpp:
#include <iostream>
#include "myClass.h"
using namespace std;
void func();
myClass* func2();
int main()
{
cout << "Hello world!" << endl;
myClass obj1;
func();
myClass* obj2 = func2();
delete obj2;
cout << "Goodbye world!" << endl;
return 0;
}
void func()
{
myClass obj1 = myClass(15);
}
myClass* func2()
{
myClass* obj1 = new myClass(5); // using the new operator to allocate memory in free space (the heap)
return obj1;
}
Am I, очевидно, что-то не так? Исходя из фона Java здесь.
==== EDIT ==== Обнаружено, что не так. Теперь я чувствую себя глупым. По какой-то причине были созданы файлы myClass.h и myClass.cpp и в каталоге моего проекта, но не показаны в дереве проекта в блоке code ::. Как только я добавил файлы в проект, он скомпилирован успешно.
Благодарим вас за ваше время и ответы. Хотя моя проблема не была действительно связана с моим кодом, я все еще узнал некоторые вещи из ваших ответов.
Эти «глупые ошибки» рассказывают вам, в чем проблема. Включение их облегчит людям помощь! – John3136
Я не помню, чтобы встречаться с ошибкой «Не могу вызвать конструктор напрямую».Не то, чтобы это невозможно: компиляторы иногда выпускают бессмысленную диагностику. Предоставьте полное сообщение об ошибке. –
Да, я попробовал изменить свой код на «myClass obj1 = myClass();» чтобы получить сообщение об ошибке «Невозможно вызвать конструктор», и он не смог заставить его подойти. Теперь я только получаю «неопределенную ссылку на„MyClass :: MyClass()“и аналогичные erros для перегруженного конструктора и деструктора, где когда-либо объекты создаются или из области видимости. Я изменил мой файл myClass.cpp правильно использовать оператор разрешения области видимости для методов (так MyClass :: MyClass() вместо просто MyClass()), но я все еще получаю неопределенную ссылку ошибки. –