的main.cpp ||未定义引用`MyClass :: loadDatas(std :: basic_string <char,std :: char_traits <char =“”>,std :: allocator <char>&gt;)'| </char> </char,>

时间:2011-04-02 13:54:32

标签: c++ string

我在参数中使用std::string时遇到问题:

MyClass有一个像这样的方法

public:  
    void loadDatas(string filename);

在我的main.cpp中,我有以下简单代码:

#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;

}

所以看起来libstdc++链接得很好(因为我能够使用cout打印文本),但是在参数中传递string会引发错误,我不知道明白为什么。

有人能帮帮我吗?

编辑:我犯了一个错误,实际上它是i.loadDatas(foo);(我纠正了它)。我的源代码不是英文的,所以我试着用英语为你做一个简单的版本。我真的称之为实例方法,而不是静态方法。

编辑2:完整的源代码

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;
}

错误日志

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 ===|

4 个答案:

答案 0 :(得分:3)

问题在于您已将class Personnage定义为具有成员函数 chargerPersonnage,但在personnage.cpp中您定义了自由函数 chargerPersonnage代替。

您似乎知道正确的语法,正如您Personnage的构造函数和析构函数正确一样,但只是为了说清楚:在personnage.cpp中将void chargerPersonnage(string nom) { }更改为void Personnage::chargerPersonnage(string nom) { }

答案 1 :(得分:2)

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

语法错误。我想你想写:

i.loadDatas(foo);

但是,如果loadDatastatic成员函数,那么您必须编写它:

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

回复你的编辑:

我不认为可以在没有看到更多代码的情况下指出代码中的错误。也许,你没有定义函数loadDatas。确保你已经定义了它。另外,请查看拼写,语法和所有内容。

答案 2 :(得分:2)

猜猜:如果你在头文件中没有使用use namespace std;(你不应该因为它可能是邪恶的),你需要用std::string filename来定义你的方法。

答案 3 :(得分:1)

我在你的代码中看到两个问题:

  • loadDatas缺少返回类型
  • 我认为您的意思是i.loadDatas(foo);而不是MyClass.loadDatas(foo);
相关问题