Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Linker Problem mit Qt Creator

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
24.10.2019, 13:35 Uhr
Paul Dinkelberg



Guten Tag,

ich habe im Rahmen eines Uni-Kurses angefangen c++ zu lernen dazu sollen wir die Entwicklerumgebug Qt Creator verwenden. Beim bearbeiten der ersten Hausaufgabe, hat auch zunächst alles wunderbar funktioniert, bis aufeinmal ohne das ich groß was geändert habe, Fehlermeldungen ("undefined references" zu meinen Funktionen einer anderen Klasse) kommen, obwohl diese einen moment früher noch normal ausführbar waren.

.pro Datei:


Code:
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt

SOURCES += \
        main.cpp \
        studenthelper.cpp

HEADERS += \
    studenthelper.h



.h Datei:

C++:
#ifndef STUDENTHELPER_H
#define STUDENTHELPER_H

/* Enum */

enum Studiengangstyp{
    Bachelor, Master
};

/* Struct */

struct Student {
    wchar_t name[64];
    long matrikelnummer;
    double durchschnittsnote;
    Studiengangstyp studiengangstyp;
};

/* Namespace */

namespace studis{
struct Student* createStudent( wchar_t name[64], long matrikelnummer, double durchschnittsnote, Studiengangstyp studiengang);
void printStudent(Student& student);
struct Student& getBetterStudent(Student& student1, Student& student2);
void getTotalAverageGrade(Student *students, int size);
void safeDeleteStudent(Student* &student);
}

#endif // STUDENTHELPER_H



.cpp Klasse mit den Funktionen

C++:
#include "studenthelper.h"
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;

    /* createStudent */

    struct Student* createStudent(wchar_t name[64], long matrikelnummer, double durchschnittsnote, Studiengangstyp studiengang){
        Student *student1 = new Student;
        for (int i = 0; i<63; i++){
            student1->name[i]=name[i];
        }
        student1->matrikelnummer=matrikelnummer;
        student1->durchschnittsnote=durchschnittsnote;
        student1->studiengangstyp=studiengang;
        return student1;
    };


    /* printStudent */



    void printStudent(Student& student){
         wstring arraystring(student.name);
         string str(arraystring.begin(), arraystring.end());

        cout << str << endl;
        cout << "Durchschnittsnote: "  << student.durchschnittsnote << endl;
        cout << "Matrikelnummer: "  << student.matrikelnummer << endl;
        cout << "Studiengangstyp: " << student.studiengangstyp<< " // Master = 1, Bachelor = 0" << endl;
     }


     /* getBetterStudent */




     struct Student& getBetterStudent(Student& student1, Student& student2){
        return (student1.durchschnittsnote <= student2.durchschnittsnote)?student1:student2;
     }



     /* getTotalAverage */


     void getTotalAverageGrade(Student *students, int size){
     double temp = 0;
     for ( int i = 0; i < size; i++){
        temp += students[i].durchschnittsnote;
     }
     cout << temp / size << endl;
     }


     /* safeDeleteStudent */


    void safeDeleteStudent(Student* &student){
     if (student != NULL){
        delete student;
        cout << "
Speicher freigegeben!"<< endl;
     }else{
        cout <<"
Speicher bereits frei!"<<endl;
             }
     }




main.cpp


C++:
#include <iostream>
#include "studenthelper.h"
#include <stdlib.h>
#include <stdio.h>
using namespace std;
using namespace studis;

int main()
{



    wchar_t Max[64];
    for (int i =0;i<63;i++){
        Max[i]= NULL;
    }
    Max[0]=L'M';
    Max[1]=L'a';
    Max[2]=L'x';
    Max[3]=L' ';
    Max[4]=L'M';
    Max[5]=L'u';
    Max[6]=L's';
    Max[7]=L't';
    Max[8]=L'e';
    Max[9]=L'r';

    wchar_t Frauke[64];
    for (int j =0;j<63;j++){
        Frauke[j]= NULL;
    }
    Frauke[0]=L'F';
    Frauke[1]=L'r';
    Frauke[2]=L'a';
    Frauke[3]=L'u';
    Frauke[4]=L'k';
    Frauke[5]=L'e';
    Frauke[6]=L' ';
    Frauke[7]=L'W';
    Frauke[8]=L'e';
    Frauke[9]=L'i';
    Frauke[7]=L'b';
    Frauke[8]=L'l';
    Frauke[9]=L'i';
    Frauke[7]=L'c';
    Frauke[8]=L'h';

    /* createStudent */

    Student *Max1 = createStudent(Max, 100123, 2.1, Master);
    Student *Frauke1 = createStudent(Frauke, 100456, 1.4, Bachelor);
    Student &MaxRef = *Max1;
    Student &FraukeRef = *Frauke1;

    /* printStudent */

    printStudent(MaxRef);
    printStudent(FraukeRef);

    /* getBetterStudent */

   Student &betterStudent = getBetterStudent(MaxRef, FraukeRef);
   printStudent(betterStudent);


   Student studArray[2];
   studArray[0] = *Max1;
   studArray[1] = *Frauke1;


   Student *ptrstud = studArray;

   getTotalAverageGrade(ptrstud,2);

   Student *zeigerAufReferenz = &MaxRef;
   safeDeleteStudent(zeigerAufReferenz);



}



Fehlermeldungen:
undefined reference to:
C:\Users\Paul\Documents\Qt\Aufgabe2\main.cpp:50: Fehler: undefined reference to `studis::createStudent(wchar_t*, long, double, Studiengangstyp)'
C:\Users\Paul\Documents\Qt\Aufgabe2\main.cpp:51: Fehler: undefined reference to `studis::createStudent(wchar_t*, long, double, Studiengangstyp)'
C:\Users\Paul\Documents\Qt\Aufgabe2\main.cpp:57: Fehler: undefined reference to `studis::printStudent(Student&)'
...
collect2.exe:-1: Fehler: error: ld returned 1 exit status


Ich bin echt am verzweifeln und frage mich ob es was mit Qt zutun hat oder ob ich etwas übersehe, aber als Anfänger bin ich leider mit meinem Latein am ende und finde auch nichts passendes bei google :/

Würde mich freuen wenn sich das mal jemand anschauen könnte, der davon ein wenig mehr Ahnung hat

Mfg

Paul

-edit: Code-Tags repariert

Dieser Post wurde am 24.10.2019 um 22:51 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
24.10.2019, 22:56 Uhr
ao

(Operator)


Du hast in studenthelper.h den Namespace studis eingeführt und dadurch alle Funktionen in diesen Namespace verfrachtet. In studenthelper.cpp musst du dasselbe machen, weil studis::CreateStudent und ::CreateStudent nicht dasselbe sind.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: