Ich versuche, während des Studiums von C++ aus Dev C++ nach Visual Studio zu wechseln (da ich mit letzterem arbeiten muss), aber aus irgendeinem Grund eine ziemlich einfache Klasse Implementierung, die perfekt in Dev C++ funktioniert, erstellt eine lange Liste von Fehlern in Visual Studio.Visual Studio akzeptiert keine Klassenimplementierung [C++]
Die Dateien sind einfach:
- Header-Datei, für die Deklaration von Konstrukteuren, Variablen usw.
- CPP-Datei, die implementieren Konstrukteuren, Funktionen usw.
- Consoleapplication-Datei (auf Visual Studio), um die Funktion "main()" zu erzeugen.
stock2.h
#ifndef STOCK2_H_
#define STOCK2_H_
class Stock
{
public:
Stock();
Stock(const char* co, int n = 0, double pr = 0.0);
~Stock();
void show()const;
private:
std::string company;
int shares;
double share_val;
double total_val;
};
#endif
stock2.cpp
#include "stdafx.h"
#include <iostream>
#include <string>
#include "stock2.h"
Stock::Stock() //default constructor
{
//code
}
Stock::Stock(const char* co, int n, double pr)
{
//code
}
Stock::~Stock()
{
std::cout << "Stock object has been destroyed" << std::endl;
}
//Methods
void Stock::show() const
{
//code
}
ConsoleApplication.cpp
#include "stdafx.h"
#include "stock2.cpp"
int main()
{
using std::cout;
const int STKS = 4;
Stock stocks[STKS] = {
Stock("NanoSmart", 12, 20.1),
Stock("Boffo Objects", 200, 2.0),
Stock(),
Stock("Monolithic Obelisks", 130, 3.25)
};
cout << "Stock Holdings: \n";
for (int st = 0; st<STKS; st++)
stocks[st].show();
return 0;
}
Ich habe versucht, die Lösung auf andere Fragen hier gepostet zu finden, aber Ich kann wirklich nicht herausfinden, was hier falsch ist. Ich lese auch, dass man eine CPP-Datei nicht # enthalten sollte, da der Header die Verbindung zwischen der main() - und der cpp-Datei selbst sein sollte, aber wenn ich beschließe, #include stock2.H anstelle von .CPP in der Konsolenanwendung zu verwenden , dann kann der Compiler die Methodenimplementierungen nicht mehr finden.
EDIT: In der Eile habe ich vergessen, die Fehler zu posten! Sie sind alle in dieser Form:
Fehler LNK2005 "public: void __thiscall Lager :: Update (double)" (? Update @ Auf @@ QAEXN @ Z) bereits definiert in ConsoleApplication1.obj ConsoleApplication1 // Pfad \ ConsoleApplication1 \ ConsoleApplication1 \ stock2.obj
EDIT2: Da viele von Ihnen, mich über die „Solution Explorer“ fragen, ich besser fügen Sie einfach einen Screenshot zu zeigen, wie es jetzt
Welche Fehler bekommen Sie? Und wenn der Compiler (eigentlich der Linker) die Methodenimplementierungen nicht finden kann, wenn Sie die Header-Datei einschließen (was der richtige Ansatz ist), dann haben Sie Ihr Projekt falsch eingerichtet – UnholySheep
Wie Sie gesagt haben, nur die Header-Dateien enthalten . Ihre Implementierungsdateien sollten automatisch kompiliert und verknüpft werden, wenn sie in Ihrer Projektdatei enthalten sind.Stellen Sie in Visual Studio sicher, dass alle Quelldateien in der Projektmappen-Exploreransicht aufgelistet sind. Sie können Dateien in diese Ansicht ziehen, um sie zu Ihrem Projekt hinzuzufügen, wenn sie fehlen. –
Ich habe gerade den Fehler hinzugefügt, den ich bekomme (ich habe komplett vergessen, diese hinzuzufügen!). Wie auch immer, ich habe das Standard-Setup für Projekte in Visual Studio verwendet, also habe ich zwei primäre Ordner unter dem Projektordner: Quelldateien (für alle .cpp-Dateien) und Header-Dateien (wo ich stock2.h gespeichert habe) – kn0bbulo