Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 08:44

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



C/C++ Übung mit Klassen

Discussion on C/C++ Übung mit Klassen within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
theo1990's Avatar
 
elite*gold: 260
Join Date: Jul 2009
Posts: 1,123
Received Thanks: 180
C/C++ Übung mit Klassen

Hallo Leute,

also ich hab das Problem, dass ich andauernd folgendender Fehler bekomme und ich kann mir nicht erklären wieso:
Code:
||=== login, Debug ===|
obj\Debug\main.o||In function `main':|
C:\PFADUNDSO\CODEblock\login\login\main.cpp|33|undefined reference to `Login::GetName()'|
||=== Build finished: 1 errors, 0 warnings (0 minutes, 2 seconds) ===|
so hier einmal der CODE dazu:

Code:
#######
main.cpp#
#######

#include <cstdlib>
#include <iostream>
#include <cstdio>
#include "login.h"

using namespace std;

struct userdata
{
  char name[20];
  char passwort[129];
};

int main()
{
  userdata benutzer;
  //char *name, *passwort;

    Login *auth = new Login();


    cout << "Bitte geben Sie ihren Benutzernamen ein!" << endl;
    scanf("%s",benutzer.name);

    cout << "Bitte geben Sie ihr Passwort ein!" << endl;
    scanf("%s",benutzer.passwort);

    cout << "Adresse von struct:" << &benutzer << endl;;

   // auth->SetName(&benutzer);
    //auth->SetPasswort(&benutzer);

    cout << auth->GetName();



    system("PAUSE");
    return EXIT_SUCCESS;
}
Code:
########
login.cpp##
########

#include "login.h"
#include <cstdlib>
#include <iostream>


using namespace std;

bool Login::UserLogin(char &username, char &passwort)
{

}

void Login::SetName(struct userdata *usr)
{
  cout << usr->name;
}
void Login::SetPasswort(struct userdata *usr)
{
  printf("%s", usr.passwort);
}

char* Login::GetName()
{
   // char *name;
    //name = &Login->name;
    //return name;
    char *name;
    char ch = 'a';
    name = &ch;
    return ch;
}
Code:
######
login.h##
######

class Login
{
  private:
    char name[20];
    char passwort[129];

   public:
     bool UserLogin(char &name, char &passwort);
     void SetName(struct userdata *usr);
     void SetPasswort(struct userdata *usr);
     char* GetName(void);
     char* GetPasswort(void);

};
so das sind meine 3 Dateien die ich mir geschrieben habe. Leider erkennt er anscheinend meine Klasse die ich oben initalisiert habe nicht an bzw. er sagt ja das die Referenz zu Login::GetName(void) undiefieniert ist aber wieso?? Ich ralls einfach nciht. Ich hab in 2 BÜchern die Kapitel über Pointer durchgelesen aber ich kommt nicht drauf. Auch habe ich mir wieder das Kapitel über OOP und Klassen durchgelesen und einiges rumprobiert aber solangsam bin ich am Ende :-P . Vllt fällt euch direkt auf was ich falsch gemacht habe.

Ich benutze CODEblocks und compiliere mit dem gcc compiler!
theo1990 is offline  
Old 11/25/2013, 20:13   #2
 
elite*gold: 1000
Join Date: Apr 2012
Posts: 1,003
Received Thanks: 208
Du musst &ch returnen und nicht ch.
qkuh is offline  
Thanks
1 User
Old 11/25/2013, 20:37   #3



 
+Yazzn's Avatar
 
elite*gold: 420
Join Date: Jan 2012
Posts: 1,082
Received Thanks: 1,000
Ich glaube du bringst da etwas durcheinander:
char = Ein Zeichen
Beispiel: char some_char = 'f';

char * = Zeichenkette (Pointer auf das erste Zeichen; Das Ende der Kette wird durch das Nullzeichen '\0' gekennzeichnet)
Beispiel: const char *some_string = "foobar"; // wird gespeichert als 'f', 'o', 'o', 'b', 'a', 'r', '\0'

Außerdem: Wenn du Speicher mit new allokierst, dann musst du diesen mit delete wieder Freigeben (Zu dem Zweck schau dir mal RAII an, wobei du hier gar nicht mit Pointern und dynamischem Speicher arbeiten, sondern ganz einfach ein Objekt von Login erstellen solltest: Login auth;)
+Yazzn is offline  
Thanks
1 User
Old 11/25/2013, 20:45   #4

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
Wobei ch beim Return zerstört wird (bzw. nach dem Return, wie auch immer), somit dürfte der Zeiger auf irgendwas undefiniertes zeigen.

Bei mir kompiliert der Code übrigens. Ich würde auf irgendeinen Fehler beim Linken tippen.
snow is offline  
Thanks
1 User
Old 11/25/2013, 20:55   #5



 
+Yazzn's Avatar
 
elite*gold: 420
Join Date: Jan 2012
Posts: 1,082
Received Thanks: 1,000
@snow911 Das darf so normalerweise gar nicht kompilieren.

Unter Visual C++ Compiler Nov 2013 CTP (CTP_Nov2013):
return ch; - error C2440: 'return' : cannot convert from 'char' to 'char *'
+Yazzn is offline  
Thanks
1 User
Old 11/25/2013, 21:11   #6

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
Ups, hab natürlich &ch returnen lassen. Wobei clang da "Address of stack memory associated with local variable 'c' returned" ausgibt.
snow is offline  
Thanks
1 User
Old 11/26/2013, 07:15   #7
 
theo1990's Avatar
 
elite*gold: 260
Join Date: Jul 2009
Posts: 1,123
Received Thanks: 180
ich sehe gerade ich idiot initalisiere einen zeiger name und benutze diesen nicht xD....
in diesem fall könnte ich name returenen oder etwa nicht?

Mein Problem mit der ganzen Sache ist wir springen im unterricht immer zwischen C und C++. Speicher wird in C mit malloc(sizeof(...)); alokiert und wird mit free() freigegeben. In C++ ist es mit new und die fregabe ist mit delete(); . Klar die sache mit den Pointer und den referencen sind bei beiden gleich, jedoch komme ich garnicht mit C/C++ auf der Arbeit in Berührung. Also ihr meint jetzt im Konkretenfall hier geht es um die variable die ich zurückgebe und nicht dass der compiler die login.h nicht findet/kennt/meidet/ignoriert ?
theo1990 is offline  
Old 11/26/2013, 14:46   #8
 
Raz9r's Avatar
 
elite*gold: 297
Join Date: Dec 2010
Posts: 1,129
Received Thanks: 1,687
Quote:
Originally Posted by Peter File View Post
Beispiel: char *some_string = "foobar";
Könnte man auch als char some_string[] = { 'f', 'o', 'o', 'b', 'a', 'r', '\0' }; schreiben.
Nein, das stimmt so nicht. Das erste ist ungültig und sollte nicht kompilieren. String-Literals sind readonly und vom Typ const char *. Das benutzen von char[] erzeugt eine Kopie auf dem Stack, die dann auch schreibbar ist, aber nur im jeweiligen Gültigkeitsbereich erreichbar ist. Tatsächlich kann man auch Werte vom Typ char * zurückgeben, aber dann sollte man eigentlich eher std::string benutzen.
Raz9r is offline  
Thanks
2 Users
Old 12/03/2013, 17:36   #9
 
theo1990's Avatar
 
elite*gold: 260
Join Date: Jul 2009
Posts: 1,123
Received Thanks: 180
Exclamation

Hallo erstmal Danke für eure Antworten jedoch komme ich immer noch kein stück weiter hier nun meine Dateien:

Code:
//main.cpp
#include <cstdlib>
#include <iostream>
#include <cstdio>
#include "login.h"

using namespace std;

int main()
{
  char name[21], passwort[130];

    Login *auth = new Login();


    cout << "Bitte geben Sie ihren Benutzernamen ein!" << endl;
    scanf("%s",name);

    cout << "Bitte geben Sie ihr Passwort ein!" << endl;
    scanf("%s",passwort);


    auth->SetName(name);
    auth->SetPasswort(passwort);


    cout << "Der Login wurde gesetzt" << endl;

    system("PAUSE");
    return EXIT_SUCCESS;
}
Code:
//login.cpp
#include "login.h"
#include <cstdlib>
#include <iostream>


using namespace std;

bool Login::UserLogin(char &username, char &passwort)
{

}

void Login::SetName(char NewName[])
{
    Login->name = &NewName;
}

void Login::SetPasswort(char NewPasswort[])
{
    Login->passwort = &NewPasswort;
}

char* Login::GetName()
{
   // char *name;
    //name = &Login->name;
    //return name;
    char *name;
    char ch = 'a';
    name = &ch;
    return name;
}
Code:
//login.h

class Login
{
  private:
    char name[21];
    char passwort[130];

   public:
     bool UserLogin(char &name, char &passwort);
     void SetName(char NewName[]);
     void SetPasswort(char NewPasswort[]);
     char* GetName(void);
     char* GetPasswort(void);

};
Nun ist es so, dass mir diese Fehlermeldung um die Ohren geschmissen:

Code:
obj\Debug\main.o||In function `main':|
PFAD\main.cpp|22|undefined reference to `Login::SetName(char*)'|
PFAD/main.cpp|23|undefined reference to `Login::SetPasswort(char*)'|
||=== Build finished: 2 errors, 0 warnings (0 minutes, 1 seconds) ===|
und ich weiß immer noch nicht wieso ich undefined reference bekomme. Meint der Compiler mein char array das ich in die Funktion übergebe? Oder was ist mit referenz genau gemeint? (warscheinlich klönnt ihr mir das jetzt auh nicht sagen) Vielleicht könnte jemand kurz von euch drüberschauen ich verzweifele gleich.
theo1990 is offline  
Old 12/03/2013, 17:53   #10
 
Padmak's Avatar
 
elite*gold: 58
Join Date: Jun 2008
Posts: 2,311
Received Thanks: 8,420
Quote:
Originally Posted by snow911 View Post
Bei mir kompiliert der Code übrigens. Ich würde auf irgendeinen Fehler beim Linken tippen.
Du hast auch sicher deine login.cpp mitcompiled und vor allem auch mitgelinkt?

Padmak
Padmak is offline  
Thanks
1 User
Old 12/03/2013, 17:59   #11
 
theo1990's Avatar
 
elite*gold: 260
Join Date: Jul 2009
Posts: 1,123
Received Thanks: 180
Quote:
Originally Posted by Padmak View Post
Du hast auch sicher deine login.cpp mitcompiled und vor allem auch mitgelinkt?

Padmak
da bin ich mir eben nicht sicher. Kannste dir kurz mal die inculdes anschauen ?

Wie müsste ich denn das richtig linken?
theo1990 is offline  
Old 12/03/2013, 23:03   #12
 
Padmak's Avatar
 
elite*gold: 58
Join Date: Jun 2008
Posts: 2,311
Received Thanks: 8,420
Das steht nicht in den Includes, das muss in der Projektdatei stehen. Du könntest sie mal hochladen? (Wenn du immer noch C::B benutzt, die cbp-Datei)

Padmak
Padmak is offline  
Thanks
1 User
Old 12/03/2013, 23:07   #13
 
Schlüsselbein's Avatar
 
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
Also Compiler würde ich mich auch weigern, sowas zu kompilieren.
Schlüsselbein is offline  
Thanks
6 Users
Old 12/04/2013, 05:30   #14
 
theo1990's Avatar
 
elite*gold: 260
Join Date: Jul 2009
Posts: 1,123
Received Thanks: 180
Quote:
Originally Posted by Schlüsselbein View Post
Also Compiler würde ich mich auch weigern, sowas zu kompilieren.
tut mir leid dasss ich noch keinen guten Programmierstil habe, jedoch finde ich dein Kommentar an dieser Stelle mehr als unpassend und destruktiv! Ich dachte in dieser Sektion wäre die Aroganz und die Überheblichkeit geringer als in anderen Sektions aber anscheinend ist das heutzutage ein generelles Problem.

@Padmak:
Ja ich benutze noch Code::blocks und sie befindet sich in meinem Projekt jedoch habe ich jetzt die Methoden der Klasse in die Main.ccp getan und siehe da die Fehlermeldung war weg. Nun interessiert mich natürlich brennend wieso der Linker das nicht geregelt hat.
theo1990 is offline  
Old 12/04/2013, 09:49   #15
 
Padmak's Avatar
 
elite*gold: 58
Join Date: Jun 2008
Posts: 2,311
Received Thanks: 8,420
Du kannst trotzdem einfach mal die cbp hier hochladen (oder von mir aus auch mir per PN schicken), solange wir nicht wissen was falsch ist kann dir keiner sagen wieso es nicht funktioniert^^

Padmak
Padmak is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
Signatur + PSD mit guter Übung
11/23/2012 - elite*gold Trading - 6 Replies
http://i2.minus.com/jAPpslvqUDHA5.png
Welche Klassen kann man mit den Klassen von WoW vergleichen?
10/09/2011 - General Gaming Discussion - 30 Replies
Thema sagt eigentl. alles ;)
[B] Kostenlose Signaturen l Übung
07/22/2011 - elite*gold Trading - 10 Replies
Hallo Leute, ich würde gerne wieder etwas üben, darum habt ihr die Chance, dass ich kostenlose Signaturen erstelle. Was ihr machen müsst ? Das Ausfülllen :
Übung macht den Meister
01/31/2011 - Metin2 Private Server - 5 Replies
Hey Epvp Da ich mir nun einen Root gekauft habe.Der Soll Irgendwann ankommen.Habe ich mir überleg. Das ich nicht beim installieren irgendwas falsch machen möchte. Deswegen Meine Frage: Gibt es irgendeine Art die Installation auf meinem Pc "Vorzuüben"? MFG XtReMe.
Kleines Tool zur Übung
12/31/2010 - AutoIt - 3 Replies
Ich hab mal ein bischen mit _Imagesearch rumgespielt und rausgekommen ist ein kleines Tool für das Browsergame Die-Staemme Was macht es? Es erscheint eine Gui in der versch. Buttons sind mit den jeweiligen Gebäuden(nicht alle....) Wenn man auf die Buttons von Gebäude klickt wird nach den Gebäuden auf dem Bildschirm gesucht und raufgeklickt. Bei Symbolen sind die Symbole im Hauptgebäude gemeint.. also wenn man z.b. auf das Symbol Holzfäller klickt wird nach diesem Symbol gesucht und...



All times are GMT +1. The time now is 08:45.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.