Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] undefined reference to '...'

Ostatnio zmodyfikowano 2014-11-20 10:31
Autor Wiadomość
krzych167
Temat założony przez niniejszego użytkownika
[C++] undefined reference to '...'
» 2014-11-20 09:42:44
Witam wszystkich bardzo serdecznie :) Od razu zaznaczę, że jestem dość początkującą osobą w C++
Zmagam się z następującym błędem kompilacji:

D:\PROJEKTY\CPP\Student\Student\main.cpp|11|undefined reference to `Student::SetName(std::string)'|

a teraz właściwy kod programu:
C/C++
Plik student.h

#include <iostream>
#include <string>

#ifndef STUDENT_H
#define STUDENT_H


class Student
{
public:
    //        void SetFirstName (std::string input) {FirstName = input;}
    //        std::string GetFirstName () const {return FirstName ;} //może być bez const
    void SetName( std::string input );
private:
    std::string FirstName;
};

#endif // STUDENT_H



Plik student.cpp
#include "Student.h"
//#include <string>
//#include <iostream>

void SetName( std::string input )
{
    std::string FirstName = input;
}


Plik main.cpp // w którym występuje błąd kompilacji
#include <iostream>
#include <string>

#include "student.h"


int main()
{
    Student Marek;
    //    Marek.SetFirstName("Marek");
    Marek.SetName( "AAA" ); // ta linijka powoduje błąd
    //    std::cout << Marek.GetFirstName();
    return 0;
}

Fragmenty kodu oznaczone komentarzem działają bez problemu, natomiast nurtuje mnie pytanie dlaczego funkcja znajdująca się poza ciałem klasy tego samego przypisania już wykonać nie chce...
Z góry dziękuję za pomoc... :)
P-121040
b00rt00s
» 2014-11-20 10:18:01
zmień:
C/C++
void SetName( std::string input )
{
    std::string FirstName = input;
}
na

zmień:
C/C++
void Student::SetName( std::string input )
{
    FirstName = input;
}

Błąd wynika z tego, że zdefiniowałeś funkcję zewnętrzną, zamiast zdefiniować funkcję składową klasy Student. Kompilator próbuje znaleźć tą definicję i mu się nie udaje. Stąd błąd.
P-121042
krzych167
Temat założony przez niniejszego użytkownika
» 2014-11-20 10:23:36
Hmm... tak już też w sumie próbowałem, ale wtedy pojawia się inny błąd w kompilacji :(
dokładniej:


||=== Build: Debug in Student (compiler: GNU GCC Compiler) ===|
D:\PROJEKTY\CPP\Student\Student\src\student.cpp||In function 'void SetName(std::string)':|
D:\PROJEKTY\CPP\Student\Student\src\student.cpp|8|error: 'FirstName' was not declared in this scope|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|

Jakiś inny pomysł co tu dalej nie gra?



Dobra, już wszystko gra! :)

Bardzo Ci dziękuję za pomoc :) Powyższy log nie uwzględniał jeszcze w nazwie funkcji tego członu "Student::"
Temat uważam za rozwiązany :)
P-121044
b00rt00s
» 2014-11-20 10:28:39
C/C++
void Student::SetName( std::string input ) //!!!! Student::SetName !!!!
{
    FirstName = input;
}
P-121045
krzych167
Temat założony przez niniejszego użytkownika
» 2014-11-20 10:31:07
Zdążyłem już poprawić w poprzednim poście :)
Niemniej bardzo dziękuję, bo strasznie mnie ten błąd nurtował, a po 1000x przeglądania co jest nie tak, nie wpadłem na to, że przecież zdeklarowałem zwykłą funkcję, a nie odnośnik... :)

Dzięki! :)
P-121046
« 1 »
  Strona 1 z 1