未定义的对类的公共方法/变量的引用

时间:2013-10-18 12:51:18

标签: c++

我是C ++的新手。我有两个文件F1和F2之间的链接器问题。为了更具可读性,我重写了代码和输出。

F1.h:

class MYCLASS...
   public:....// [constructor] etc         
         void myMethod(const string& r);
         static string s;

F1.cpp:

void myMethod(const string& r)
{
    MYCLASS::s=r;
}
[...]
void serialize(...)
{
   operation(s,...)
}

F2.cpp:

const string& a;
MYCLASS Obj;
Obj.myMethod(a);

目标是在F1.cpp的serialize方法中使用来自F2.cpp的字符串a,而不向serialize函数添加任何参数。为此,我试图使用中间r变量。

编译(基于gcc的编译器)给出错误:

In function `the_function_from_F2.cpp(...)':
F2.cpp:227: undefined reference to `MYCLASS::myMethod(std::basic_string<char,      std::char_traits<char>, std::allocator<char> > const&)'
: In function `myMethod(std::basic_string<char, std::char_traits<char>,   std::allocator<char> > const&)':
F1.cpp:197: undefined reference to `MYCLASS::s'
: In function `MYCLASS::serialize(....) const':
F2.cpp:69: undefined reference to `MYCLASS::s'

感谢您的任何建议!

2 个答案:

答案 0 :(得分:1)

更改为:

void MYCLASS::myMethod(const string& r)
{
    MYCLASS::s=r;
}

std::string MYCLASS::s;

这仍然是一个类方法,因此您需要指定。

答案 1 :(得分:1)

您忘记了定义 MYCLASS::s成员。它必须在像

这样的源文件中完成
std::string MYCLASS::s;

您在课堂上所做的只是声明静态变量。