C ++:链接时gcc找不到静态成员

时间:2011-01-17 00:48:25

标签: c++ gcc linker

我收到错误:

file.cpp:20: undefined reference to `MyClass::arr'

在这一行,我有:

#include "MyClass.hpp"
extern "C" {
void MyClass::func() {
 arr = 0;
}

标题:

class MyClass {
    public:
     static int arr;
     static void func();
}

P.S。使用-Xlinker -zmuldefs调用gcc(4.x)以避免多重定义检查。

3 个答案:

答案 0 :(得分:4)

这没有任何意义:

#include <MyClass.hpp>
extern "C" {
void MyClass::func() {
 arr = 0;
}

#include <MyClass.hpp>

int MyClass::arr = 0; // needs to be instantiated to satisfy linker.

void MyClass::func() 
{
  arr = 0;
}

答案 1 :(得分:1)

实施

#include "MyClass.hpp"

 void MyClass::func()
 {
     this->arr = 0;
 }

头文件

class MyClass 
{
public:
    static int arr;
    static void func();
}

答案 2 :(得分:1)

class语句中声明后,静态类字段也必须在单个.cpp文件中定义。在这样的文件中你应该把:

int MyClass::arr;

顺便说一句,#include语句只有在包含系统标题时才有<>个括号;对于您自己的标题,您应该使用通常的双引号("")。