auf Libs verweisen
-
oder include <windows.h> geht auch...
-
ich will in meiner main einfach nur irgendwas aus der Lib aufrufen. Am besten so, dass ich was zurückbekomme.....
Es ist einfach ein Testprogramm um zu sehn wie ich Libs bauen muss, und wie ich am besten auf sie zugreife.....Vielen Dank
-
Wie wär's mit folgendem Minimalversuch (zusammen mit ZuK's "lib.h"):
#include <iostream> #include "lib.h" using namespace std; int main() { cout<<Display(); cin.get(); return 0; }Wenn das so funktioniert, solltest du dich daran machen, deine Lib weiter auszubauen.
(PS: das "cin.get();" dient nur dazu, die Konsole offenzuhalten - wenn du dich an der Ausgabe sattgesehen hast, drücke einfach mal ENTER)
-
Vielen Dank für deine Hilfe...
Ich habe das so eingefügt aber es kommt folgende Fehlermeldung:
error C2593: 'operator <<' is ambiguous
error C3861: 'Display': identifier not found, even with argument-dependent lookup
Meinen Code:
#include <stdio.h> #include <iostream> #include <windows.h> #include "Lib.h" #include "stdafx.h" using namespace std; int main( int argc, char* argv[]) { cout<<Display(); cin.get(); return 0; }
-
Erstens brauchst du <stdio.h> (in C++ wäre das sowieso <cstdio>) und <windows.h> für dieses Progrämmchen nicht wirklich. ("stdafx.h" vermutlich auch nicht)
Und zweitens: Was steht in deiner "lib.h"?
-
In meiner lib steht folgendes:
lib.cpp:
#include "Lib.h";int student::Display (void){ student a; a.nummer=1; return a.nummer; };lib.h:
#ifndef lib_h_included #define lib_h_included #include <stdio.h> #include <iostream> class student{ public: student(); int nummer; int Display (void); virtual ~student(); }; #endifIch hoffe du kannst mir helfen....
Vielen Dank
-
Achso, da hast du mich mit der Display() doch etwas verwirrt (nach deinen bisherigen Posts dachte ich, das sollte eine globale Funktion sein) - in dem Fall benötigst du natürlich noch ein Objekt, dessen Display() du aufrufen kannst:
#include <iostream> #include "lib.h" using namespace std; int main() { student stud; cout<<stud.Display()<<endl; cin.get(); return 0; }PS: Die Includes in der "lib.h" sind auf jeden Fall überflüssig - binde immer nur das ein, was du aktuell benötigst.
PPS: Ich hoffe mal, der Inhalt der Display()-Methode ist nur ein Provisorium

(im Ernstfall solltest du wohl eher den Inhalt von *this ändern als ein neues student-Objekt anzulegen)
-
Vielen Dank.... er kompiliert soweit, jetzt hat er aber ein paar Linkerfehler:
error LNK2019: unresolved external symbol "public: virtual __thiscall student::~student(void)" (??1student@@UAE@XZ) referenced in function _main
error LNK2001: unresolved external symbol "public: virtual __thiscall student::~student(void)" (??1student@@UAE@XZ)
error LNK2019: unresolved external symbol "public: __thiscall student::student(void)" (??0student@@QAE@XZ) referenced in function _main
error LNK2001: unresolved external symbol "public: __thiscall student::student(void)" (??0student@@QAE@XZ)
Wo ich was gelinkt habe:
Properties:
C/C++ - General - Additioal Include Directories
"Visual Studio Projects\Lib\include" (da ist meine Lib.h drin)Linker - General - Additional Library Directories
"Visual Studio Projects\Lib\bin" ( da ist mein Lib.lib drin)Linker - Input - Additional dependencies
Lib.libFehlt da noch was???
Danke
-
kalua schrieb:
Fehlt da noch was???
Steht doch da: student::student und student::~student fehlen.
Du hast Konstruktor und Destruktor zwar in lib.h deklariert, aber definiert hast du sie nicht.
-
wo definiere ich die denn???
In meinem lib.cpp ????
Und einfach in der Form student::student; ???
-
kalua schrieb:
wo definiere ich die denn???
In meinem lib.cpp ????
Ja
Und einfach in der Form student::student; ???
Nein, da brauchst du schon einen Funktionsrumpf (zur Not leer) und Parameterliste:
student::student() { //Inititalisierungen } student::~student() { //Aufräumarbeiten }
-
Jippih es funktioniert!!!!!!!!!
Vielen Dank...
Aber was sollte jetzt im Idealfall in bei Aufräumarbeiten und Initialisierung stehn?????
#include "Lib.h"; student::student() { //Inititalisierungen } int student::Display (void){ student a; a.nummer=1; return a.nummer; }; student::~student() { //Aufräumarbeiten }Dankeschön!!!!!!!!!!!!!!

-
kalua schrieb:
Aber was sollte jetzt im Idealfall in bei Aufräumarbeiten und Initialisierung stehn?????
Im Idealfall gar nichts. Kommt halt drauf an, was deine Klasse so tut. Deine braucht weder Konstruktor noch Destruktor.
Übrigens, einzelne Satzzeichen tun's auch und wirken weniger dümmlich.
-
Das kommt ganz darauf an, was deine Klasse können muß - für eine so primitive Testklasse reicht es vermutlich, wenn diese Methoden leer bleiben, komplexere Klassen legen im Konstruktor möglicherweise Heap-Speicher (per new) an oder reservieren sich andere Systemressourcen, die sie nach getaner Arbeit im Destruktor wieder freigeben.
PS: Als nächstes solltest du mal das Design deiner Klasse überdenken

-
ok, vielen Dank!
Ich werde probieren mein Satzzeichen-Verhalten zu ändern
Einen schönen Tag noch und schönes We !
Ach und ich wollte noch sagen, dass das hier echt das BESTE Forum ist, dass ich kenne ! Sehr schön! Weiter so !