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

Problem z linkerem

Ostatnio zmodyfikowano 2013-12-20 16:35
Autor Wiadomość
oputyk
Temat założony przez niniejszego użytkownika
Problem z linkerem
» 2013-12-20 14:38:48
Witam. Mam problem z (jak w temacie) z rozłożeniem programu na pliki. Oto błąd, który mi pokazuje kompilator:

Error 1 error LNK2028: unresolved token (0A000504) "public: void __thiscall str::Binary<class Dane>::New(bool)" (?New@?$Binary@VDane@@@str@@$$FQAEX_N@Z) referenced in function "public: void __thiscall OB_Gra::loading(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?loading@OB_Gra@@$$FQAEXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) C:\Users\Kamil i Bartek\Documents\Pulpit\Programowanie\C++\Projekty\Projekty visuala 2013\aplikacje okienkowe\SFML 2.0\Gra - Motor\Gra - Motor\OB_Gra.obj Gra - Motor
Error 2 error LNK2028: unresolved token (0A000505) "public: class Dane __thiscall str::Binary<class Dane>::Load(void)" (?Load@?$Binary@VDane@@@str@@$$FQAE?AVDane@@XZ) referenced in function "public: void __thiscall OB_Gra::loading(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?loading@OB_Gra@@$$FQAEXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) C:\Users\Kamil i Bartek\Documents\Pulpit\Programowanie\C++\Projekty\Projekty visuala 2013\aplikacje okienkowe\SFML 2.0\Gra - Motor\Gra - Motor\OB_Gra.obj Gra - Motor
Error 3 error LNK2019: unresolved external symbol "public: void __thiscall str::Binary<int>::New(bool)" (?New@?$Binary@H@str@@QAEX_N@Z) referenced in function _main C:\Users\Kamil i Bartek\Documents\Pulpit\Programowanie\C++\Projekty\Projekty visuala 2013\aplikacje okienkowe\SFML 2.0\Gra - Motor\Gra - Motor\Gra - Motor.obj Gra - Motor
Error 4 error LNK2019: unresolved external symbol "public: int __thiscall str::Binary<int>::Load(void)" (?Load@?$Binary@H@str@@QAEHXZ) referenced in function _main C:\Users\Kamil i Bartek\Documents\Pulpit\Programowanie\C++\Projekty\Projekty visuala 2013\aplikacje okienkowe\SFML 2.0\Gra - Motor\Gra - Motor\Gra - Motor.obj Gra - Motor
Error 5 error LNK2019: unresolved external symbol "public: void __thiscall str::Binary<class Dane>::New(bool)" (?New@?$Binary@VDane@@@str@@$$FQAEX_N@Z) referenced in function "public: void __thiscall OB_Gra::loading(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?loading@OB_Gra@@$$FQAEXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) C:\Users\Kamil i Bartek\Documents\Pulpit\Programowanie\C++\Projekty\Projekty visuala 2013\aplikacje okienkowe\SFML 2.0\Gra - Motor\Gra - Motor\OB_Gra.obj Gra - Motor
Error 6 error LNK2019: unresolved external symbol "public: class Dane __thiscall str::Binary<class Dane>::Load(void)" (?Load@?$Binary@VDane@@@str@@$$FQAE?AVDane@@XZ) referenced in function "public: void __thiscall OB_Gra::loading(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?loading@OB_Gra@@$$FQAEXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) C:\Users\Kamil i Bartek\Documents\Pulpit\Programowanie\C++\Projekty\Projekty visuala 2013\aplikacje okienkowe\SFML 2.0\Gra - Motor\Gra - Motor\OB_Gra.obj Gra - Motor
Error 7 error LNK1120: 6 unresolved externals C:\Users\Kamil i Bartek\Documents\Pulpit\Programowanie\C++\Projekty\Projekty visuala 2013\aplikacje okienkowe\SFML 2.0\Gra - Motor\Debug\Gra - Motor.exe 1 1 Gra - Motor
A oto kod:
C/C++
///Kod z pliku nagłówkowego///

namespace str
{
    class File
    {
    protected:
        std::string name;
        std::string end;
    public:
        File( std::string name_of_file, std::string end_of_name )
            : name( name_of_file )
            , end( end_of_name )
        { }
        std::string operator =( std::string );
        std::string operator +( std::string );
        bool operator ==( std::string );
        bool operator +=( std::string );
        std::string Change_end( std::string );
        std::string Get_end();
        std::string Change_name( std::string );
        std::string Get_name();
    };
    template < class arg1 >
    class Binary
        : public File
    {
    protected:
        arg1 obiekt;
    public:
        Binary( arg1 object, std::string name_of_file, std::string end_of_name )
            : File( name_of_file, end_of_name )
            , obiekt( object )
        { }
        void New( bool = false );
        arg1 Load();
        void Edit( arg1 );
    };
}

///Kod z pliku cpp///

#include"stream.h"
/********************** File ***********************/
bool str::File::operator ==( std::string name_of_file )
{
    if( name == name_of_file )
         return true;
    else
         return false;
   
}
bool str::File::operator +=( std::string end_of_file )
{
    if( end == end_of_file )
         return true;
    else
         return false;
   
}
std::string str::File::Change_name( std::string name_of_file )
{
    if( name_of_file != name )
    {
        remove(( name + end ).c_str() );
        name = name_of_file;
        std::ofstream file(( name + end ).c_str(), std::ios::binary );
        file.close();
    }
    return name;
}
std::string str::File::Change_end( std::string end_of_file )
{
    if( end_of_file != end )
    {
        remove(( name + end ).c_str() );
        end = end_of_file;
        std::ofstream file(( name + end ).c_str(), std::ios::binary );
        file.close();
    }
    return end;
}
std::string str::File::operator =( std::string name_of_file )
{
    return Change_name( name_of_file );
}
std::string str::File::operator +( std::string end_of_file )
{
    return Change_end( end_of_file );
}
std::string str::File::Get_name()
{
    return name;
}
std::string str::File::Get_end()
{
    return end;
}
/********************** Binary ***********************/
template < class arg1 >
void str::Binary < arg1 >::New( bool object_in_file )
{
    std::fstream file(( name + end ).c_str(), std::ios::binary | std::ios::out | std::ios::trunc );
    if( object_in_file )
    {
        file.write(( char * ) & obiekt, sizeof( arg1 ) );
    }
    file.close();
}
template < class arg1 >
arg1 str::Binary < arg1 >::Load()
{
    arg1 * bufor = new arg1[ sizeof( arg1 ) ];
    std::fstream file(( name + end ).c_str(), std::ios::in | std::ios::binary );
    file.read(( char * ) bufor, sizeof( arg1 ) );
    file.close();
    obiekt = * bufor;
    delete[] bufor;
    return obiekt;
}
template < class arg1 >
void str::Binary < arg1 >::Edit( arg1 object )
{
    std::fstream file(( name + end ).c_str(), std::ios::binary | std::ios::trunc | std::ios::out );
    file.write(( char * ) object, sizeof( arg1 ) );
    obiekt = object;
    file.close();
}
Proszę o pomoc i z góry dzięki.
P-99692
Mrovqa
» 2013-12-20 16:14:01
Dodałeś plik .cpp do projektu? Jeśli tak, to spróbuj przebudować projekt - w przypadku dziwnych błędów tego typu zazwyczaj pomaga.
P-99695
oputyk
Temat założony przez niniejszego użytkownika
» 2013-12-20 16:21:12
Plik cpp miałem od samego początku. Teraz przebudowałem program, ale niestety nic to nie dało. Może masz jakiś inny pomysł? Dodam jeszcze, że dałem to do jednego pliku nagłówkowego i błąd jest chyba inny, ale też linkera.
P-99697
maly
» 2013-12-20 16:29:21
Definicje template daj do nagłowka a nie *.cpp
P-99698
oputyk
Temat założony przez niniejszego użytkownika
» 2013-12-20 16:35:26
Ok. Dzięki, działa. Zamykam temat.
P-99699
« 1 »
  Strona 1 z 1