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

发布于 2024-10-12 04:59:36 字数 403 浏览 3 评论 0原文

我收到错误:

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

在这一行,我有:

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

在 header:

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

PS gcc (4.x) is call with: -Xlinker -zmuldefs 以避免多重定义检查。

I get the error:

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

At this line, I have:

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

At header:

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

P.S. gcc (4.x) is called with: -Xlinker -zmuldefs to avoid multiple definition checking.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

灵芸 2024-10-19 04:59:36

这没有意义:

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

This makes no sense :

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

write

#include <MyClass.hpp>

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

void MyClass::func() 
{
  arr = 0;
}
も让我眼熟你 2024-10-19 04:59:36

实现

#include "MyClass.hpp"

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

头文件

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

implementation

#include "MyClass.hpp"

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

header file

class MyClass 
{
public:
    static int arr;
    static void func();
}
夏九 2024-10-19 04:59:36

静态类字段在 class 语句中声明之后,还必须在单个 .cpp 文件中定义。在这样的文件中,您应该输入:

int MyClass::arr;

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

Static class fields, after being declared in the class statement, must be also defined in a single .cpp file. In such file you should put:

int MyClass::arr;

By the way, the #include statements have <> brackets only when you're including system headers; for your own headers you should use the usual double quotes ("").

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文