您的位置:首页 > 其它

静态数据成员必须赋初值

2011-08-18 15:03 134 查看
实验环境:

OS: Window 7

IDE: Visual Studio 2010 Pro

以下代码虽然没有语法错误,但无法通过编译。

#include <iostream>
using namespace std;

class C
{
public:
void f() { cout << ++x <<endl; }
private:
static int x;
};

int main()
{
C c0;
c0.f();

system( "pause" );
return 0;
}


编译结果如下:

1>------ 已启动生成: 项目: Hello World, 配置: Debug Win32 ------

1>生成启动时间为 2011/8/18 14:57:03。

1>InitializeBuildStatus:

1>  正在对“Debug\Hello World.unsuccessfulbuild”执行 Touch 任务。

1>ClCompile:

1>  main.cpp

1>ManifestResourceCompile:

1>  所有输出均为最新。

1>main.obj : error LNK2001: 无法解析的外部符号 "private: static int C::x" (?x@C@@0HA)

1>E:\Hello World\Debug\Hello World.exe : fatal error LNK1120: 1 个无法解析的外部命令

1>

1>生成失败。

1>

1>已用时间 00:00:01.04

========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

对静态数据成员赋初值后可顺利通过编译。

#include <iostream>
using namespace std;

class C
{
public:
void f() { cout << ++x <<endl; }
private:
static int x;
};
int C::x = 0; // initialize class member x

int main()
{
C c0;
c0.f();

system( "pause" );
return 0;
}


编译结果:

1>------ 已启动生成: 项目: Hello World, 配置: Debug Win32 ------

1>生成启动时间为 2011/8/18 15:03:06。

1>InitializeBuildStatus:

1>  正在对“Debug\Hello World.unsuccessfulbuild”执行 Touch 任务。

1>ClCompile:

1>  main.cpp

1>ManifestResourceCompile:

1>  所有输出均为最新。

1>Manifest:

1>  所有输出均为最新。

1>LinkEmbedManifest:

1>  所有输出均为最新。

1>  Hello World.vcxproj -> E:\Hello World\Debug\Hello World.exe

1>FinalizeBuildStatus:

1>  正在删除文件“Debug\Hello World.unsuccessfulbuild”。

1>  正在对“Debug\Hello World.lastbuildstate”执行 Touch 任务。

1>

1>生成成功。

1>

1>已用时间 00:00:01.13

========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  任务 system c class ide 2010
相关文章推荐