Ich habe mir ein paar andere Fragen angesehen, die das fragen, aber meine scheint viel einfacher zu sein als die, die ich durchgemacht habe, also werde ich meinen Fall dafür fragen .Visual C++: Kein Standardkonstruktor
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");
}
Der obige Code an sich nicht ausgibt jeden Fehler.
Allerdings bekomme ich ein paar Fehler, nachdem ich Learn(0)
durch Learn(x)
ersetze. Sie sind:
- Fehler E0291:
no default constructor exists for class Learn
- Error C2371:
'x' : redefinition; different basic types
- Error C2512:
'Learn' : no appropriate default constructor available
Gibt es Gründe dafür? Ich möchte wirklich tatsächlich die Ganzzahlvariable x
darin eingeben, anstatt die 0
. Ich weiß, das ist nur Übung und ich bin neu, aber wirklich, ich bin ein wenig verwirrt, warum das nicht funktioniert.
Jede Hilfe wäre dankbar, danke.
Sie haben versucht, den Standardwert von x (in der Lernfunktion) in der .cpp-Datei anzugeben. Sie sollten es stattdessen in der Kopfzeile definieren. – ZeroUltimax
@ZeroUltimax ist bezüglich des Standardparameters korrekt, aber der wirkliche Grund, warum der Compiler sich beschwert, ist, dass er denkt, dass Sie versuchen, eine Funktion namens 'Learn' zu definieren. Sie können einen Konstruktor nicht so aufrufen, wie Sie es möchten. Sie müssen 'Learn some_name (x);'. – Jonesinator
[OT]: 'Learn :: Learn (int x = 0)' ist nutzlos in Ihrem cpp, da der Standardwert nur in dieser cpp-Datei verfügbar ist. Entfernen Sie es oder legen Sie es in Ihre Kopfzeile. – Jarod42