qt定义静态成员变量 报错 multiple definition of `Widget::mycount'
时间: 2024-09-29 11:07:03 浏览: 14
在Qt中,如果你试图在一个头文件(`.h`)中声明了一个静态成员变量,并在多个源文件(`.cpp`)中尝试定义它,可能会遇到“multiple definition of”错误,比如`Widget::mycount`。这是因为静态成员变量是所有对象共有的,所以在每个翻译单元(translation unit,即编译后的.o文件)里都需要包含这个定义。
解决这个问题的方法是将静态成员变量的定义移动到一个单独的源文件(通常称为`.cc`或`.cpp`),并在该文件中初始化它,然后在其他源文件中只包含它的声明。这样做的步骤如下:
1. **头文件** (`Widget.h`):
```cpp
class Widget {
public:
static quint32 mycount;
};
```
注意这里只是声明了`mycount`,没有提供定义。
2. **源文件** (`Widget.cc` 或 `Widget.cpp`):
```cpp
#include "Widget.h"
quint32 Widget::mycount = 0; // 只有在这里提供静态成员变量的初始化
```
3. **其他的源文件** (`main.cpp`, `otherfile.cpp` 等):
```cpp
#include "Widget.h" // 包含声明即可,不需要提供完整的定义
```
这样,静态成员变量只会被定义一次,避免了多重定义的问题。记得在构建项目时包含正确的`Widget.cc` 文件。