开发者

main.cpp|| undefined reference to `MyClass::loadDatas(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'|

I encounter a problem using std::string in parameters :

MyClass has a method like this

public:  
    void loadDatas(string filename);

In my main.cpp I have the following simple code :

#include <iostream>
#include <string>

#include "myclass.hpp";

using namespace std;

int main()
{

    string foo = "test.txt";
    cout << foo << endl; // Print Hello Kitty, no problems

    MyClass i;
    // The following line raise :
    // obj/Release/src/main.o||In function `main':|
    // main.cpp|| undefined reference to `MyClass::loadDatas(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'|
    // ||=== Build finished: 1 errors, 0 warnings ===|
    i.loadDatas(foo);

    return EXIT_SUCCESS;

}

So it looks like libstdc++ is well linked (because I'm able to print the text using cout), but passing a string in parameters raise an error and I don't understand why.

Could someone help me please ?

EDIT : I made a mistake, in fact it is i.loadDatas(foo); (I corrected it). My source code isn't in english so I tryed to made a simple version for you in english. I really call an instance method and not a static method.

EDIT 2 : Complete source code

personnage.hpp

#ifndef PERSONNAGE_H
#define PERSONNAGE_H

#include <iostream>
#include <string>

#include <libxml/tree.h>
#include <libxml/parser.h>
#include <libxml/xmlmemory.h>
#include <libxml/xpath.h>
#include <libxml/xpathInternals.h>

#include "carte.hpp"

using namespace std;

class Personnage : public Carte
{

 开发者_开发技巧   public:

        Personnage();

        void chargerPersonnage(string nom);

        virtual ~Personnage();

    private:

        //! Le texte d'accroche de la carte
        string _accroche;

};

#endif // PERSONNAGE_H

personnage.cpp

#include "personnage.hpp"

Personnage::Personnage() : Carte("Sans titre")
{

}

void chargerPersonnage(string nom)
{

}

Personnage::~Personnage()
{
    //dtor
}

main.cpp

#include <iostream>
#include <string>

#include <SFML/Graphics.hpp>

#include "personnage.hpp"

using namespace sf;
using namespace std;

int main()
{

    string test = "Hello Kitty";
    cout << test << endl;

    Personnage test2;
    test2.chargerPersonnage(test);

    return EXIT_SUCCESS;
}

error log

obj/Release/src/main.o||In function `main':|
main.cpp|| undefined reference to `Personnage::chargerPersonnage(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'|
||=== Build finished: 1 errors, 0 warnings ===|


The problem is that you've defined class Personnage as having a member function chargerPersonnage, but in personnage.cpp you define a free function chargerPersonnage instead.

You appear to know the correct syntax, as you did Personnage's constructor and destructor correctly, but just to make it clear: Change void chargerPersonnage(string nom) { } to void Personnage::chargerPersonnage(string nom) { } in personnage.cpp.


MyClass i;
MyClass.loadDatas(foo); 
     //^this syntax is wrong. Dot is used with "instance" of class!

Wrong syntax. I think you wanted to write:

i.loadDatas(foo);

However, if loadData is a static member function, then you've to write it:

MyClass::loadDatas(foo);
     //^^ note the difference!

REPLY TO YOUR EDIT:

I don't think it's possible to point out the error in your code without seeing more code. Maybe, you've not defined the function loadDatas. Make sure you've defined it. Also, check out the spelling, syntax and all.


Just a guess: if you do not use use namespace std; in your header file (which you shouldn't because it can be evil), you need to define your method with std::string filename.


I see two problems in your code:

  • loadDatas lacks a return type
  • I think you mean i.loadDatas(foo); and not MyClass.loadDatas(foo);
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜