我有一个构造函数,其签名是这样的:
cpuInput (const std::string &label);
实际的构造函数使用引用超构造函数的初始化列表,所以它看起来像这样:
cpuInput::cpuInput (const string &label) : StateMonitor::input(label) { }
该类编译为目标文件.如果我将该文件与调用构造函数的驱动程序一起编译:
cpuInput *cpu = new cpuInput();
当然我从g得到一个错误:
demo.cpp:15:31: error: no matching function for call to ‘cpuInput::cpuInput()’ demo.cpp:15:31: note: candidates are: In file included from demo.cpp:3:0: input_cpusage/cpuInput.hpp:7:3: note: cpuInput::cpuInput(const string&)
cpuInput *cpu = new cpuInput("cpu");
并将其他所有内容保持不变,我现在得到:
demo.cpp:15: undefined reference to `cpuInput::cpuInput(std::string const&)'
我意识到const string&与字符串const&并不完全相同,但我原以为这是在C中传递字符串引用(在这种情况下,通过从const char *转换)的标准方法,并且:
class A { public: A (const string &s) : x(s) { cout << x << endl; } private: const string x; }; class B : A { public: B (const string &s) : A(s) { } }; int main (void) { new B("test"); return 0; }
不重现这个问题,虽然它似乎与我相同的WRT相关元素.
那么为什么一方面会说:
然后到新的cpuInput(“string”)说:
undefined reference to `cpuInput::cpuInput(std::string const&)‘