链接静态 class 成员函数抛出未定义的引用错误 C++

linking static class member function throws undefined reference error c++

关于此类问题,我已经经历过许多类似的话题,但我仍然无法解决此错误。任何帮助将不胜感激。

/*samp.h header file*/

#include<iostream>
using namespace std;

class test
{
private:
test();
public:
static void const_caller();
};

/*samp.cpp file*/

#include<iostream>
using namespace std;

class test
{
private:
test()
{
cout<<"priv cont called\n";
}
public:
static void const_caller()
{
cout<<"calling priv const\n";
}
};

/*main.cpp file */

#include"samp.h"
using namespace std;

int main(int argc, char **argv)
{
test::const_caller();
}

当我做的时候

g++ samp.cpp main.cpp -o main.out

我收到这个错误

/usr/bin/ld: /tmp/ccHZVIBK.o: in function `main':
main.cpp:(.text+0x14): undefined reference to `test::const_caller()'

我已经有一段时间无法解决这个问题了。

使用您发布的代码,.cpp 文件包含它自己的 class 定义,它与 .h 文件中的 class 同名,但实际上是不同的 class.

.cpp文件中,需要使用:

test::test()
{
   cout<<"priv cont called\n";
}

void test::const_caller()
{
   cout<<"calling priv const\n";
}

samp.cpp 文件中再次定义测试 class。

您需要包含 samp.h header 并实现 test class:

的方法
#include "samp.h"

using namespace std;

test::test()
{
    cout << "priv cont called\n";
}

void test::const_caller()
{
    cout << "calling priv const\n";
}