error LNK2001: 无法解析的外部符号 "public: static ......"

本文介绍了解决编译错误LNK2001的方法,主要针对静态变量的正确初始化过程进行了详细讲解,并提供了具体的代码示例。

error LNK2001: 无法解析的外部符号 "public: static ......"

今天练习类的编程时遇到的问题,源自静态变量的初始化问题。

下面是对static的一点讲解 
=============================================== 
  静态数据成员的使用方法和注意事项如下: 

  1、静态数据成员在定义或说明时前面加关键字static。 

  2、静态成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式如下: 

    <数据类型><类名>::<静态数据成员名>=<值> 

  这表明: 

  (1) 初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆。 

  (2) 初始化时不加该成员的访问权限控制符private,public等。 

  (3) 初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员。 

  3、静态数据成员是静态存储的,它是静态生存期,必须对它进行初始化。 

  4、引用静态数据成员时,采用如下格式: 

   <类名>::<静态成员名> 

  如果静态数据成员的访问权限允许的话(即public的成员),可在程序中,按上述格式来引用静态数据成员。  


exp: 
class aclass{ 
      public:   
              static int a; 
}; 
static int aclass::a=0; //初始化 

void main() 

        int amain=0; 
        amain=aclass::a;     //使用,无需定义相关类的变量而直接使用之。 
}  

对于 静态常量整型 可以在类中初始化,另外对于常量则必须在构造函数成员初始式列表里初始化。

#include <iostream>
using namespace std;
class Person
{
public:
const int a ;
static const int b = 2 ; // 对 静态-常量整型 初始化
Person(int aa):a(aa) // 这里必须对常量a初始化,也只能这样初始化。
{}
};
int main()
{
cout << Person::b << endl;
Person p(9);
cout << p.a << endl ;
return 0;
}



源自 :http://my.oschina.net/ypimgt/blog/89138

编译时出现 `error LNK2001` 无法解析外部符号错误,通常是由于链接器找不到符号的定义。对于 `QSaveFile::staticMetaObject` 和 `QHashData::shared_null` 这两个符号,可尝试以下解决方法: #### 检查库文件链接 确保在 CMake 或项目配置中正确链接了所需的 Qt 库。如果使用 CMake,可以在 `CMakeLists.txt` 中添加以下内容: ```cmake find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(your_target_name PRIVATE Qt6::Core) ``` 这里的 `your_target_name` 是你的项目目标名称。 #### 检查 Qt 安装路径 确保 Qt 安装路径正确,并且环境变量配置无误。如果使用的是 Qt Creator,可在项目设置中检查 Qt 工具包的路径。 #### 检查头文件包含 确保在源文件中正确包含了所需的头文件。对于 `QSaveFile` 和 `QHashData`,应包含相应的头文件: ```cpp #include <QSaveFile> #include <QHash> ``` #### 清理和重新构建项目 有时候,旧的构建文件可能会导致链接错误。可以尝试清理项目并重新构建: - 在 Qt Creator 中,选择“构建” -> “清理所有项目”,然后再选择“构建” -> “重新构建所有项目”。 #### 检查 Qt 版本兼容性 确保使用的 Qt 版本与代码兼容。某些符号可能在不同的 Qt 版本中有所变化。 ### 示例代码 以下是一个简单的 CMake 项目示例: ```cmake cmake_minimum_required(VERSION 3.16) project(YourProjectName) find_package(Qt6 COMPONENTS Core REQUIRED) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) add_executable(YourProjectName main.cpp) target_link_libraries(YourProjectName PRIVATE Qt6::Core) ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值