이 질문에 대한 몇 가지 다른 질문을 살펴 보았습니다.하지만 내 사례는 훨씬 간단 해 보였습니다. .Visual C++ : 기본 생성자가 없습니다.
Learn.h :
#ifndef LEARN_H
#define LEARN_H
class Learn
{
public:
Learn(int x);
~Learn();
private:
const int favourite;
};
#endif
Learn.cpp :
#include "Learn.h"
#include <iostream>
using namespace std;
Learn::Learn(int x=0): favourite(x)
{
cout << "Constructor" << endl;
}
Learn::~Learn()
{
cout << "Destructor" << endl;
}
Source.cpp :
#include <iostream>
#include "Learn.h"
using namespace std;
int main() {
cout << "What's your favourite integer? ";
int x; cin >> x;
Learn(0);
system("PAUSE");
}
자체에 위의 코드를 출력하지 않는 오류.
그러나 Learn(0)
을 Learn(x)
으로 바꾼 후에 몇 가지 오류가 발생합니다. 그들은 :
- 오류 E0291 :
no default constructor exists for class Learn
- Error C2371 :
'x' : redefinition; different basic types
- Error C2512 : 이것에 대한
'Learn' : no appropriate default constructor available
이유라도? 실제로 실제로 0
대신 정수형 변수 x
을 입력하려고합니다. 나는 이것이 단지 연습이고 나는 이것에 대해 새로운 것을 알지만, 정말로 이것이 왜 효과가 없는지에 대해서는 약간 혼란 스럽다.
감사합니다. 감사드립니다.
.cpp에서 학습 ctor의 기본값 x를 지정하려고했습니다. 대신 헤더에 정의해야합니다. – ZeroUltimax
@ZeroUltimax는 기본 매개 변수에 대해서는 정확하지만 컴파일러가 불평하는 진정한 이유는 'Learn'이라는 함수를 정의하려고한다고 생각하기 때문입니다. 시도하는 것처럼 생성자를 호출 할 수 없습니다. 'Learn some_name (x); '을 사용해야합니다. – Jonesinator
[OT] :'Learn :: Learn (int x = 0)'는 cpp에서 쓸모가 없습니다. 기본값은 그 cpp 파일에서만 사용 가능합니다. 그것을 제거하거나 머리글에 넣으십시오. – Jarod42