读书人

关于静态结构体变量初始化的有关问题

发布时间: 2013-03-25 15:43:04 作者: rapoo

关于静态结构体变量初始化的问题
各位大神,小弟今天碰到一个很棘手的问题,就是我在类外声明一个结构体,然后在类内定义一个私有静态结构体变量,然后初始化其成员,直接看代码。。。


我将结构体声明改为如下依然报错

项目中必须这样使用,暂时还没想到其他办法,各位大神,请帮忙小弟解决一下,在此不胜感激!





[解决办法]
# include <iostream>

using namespace std;

typedef struct
{
int Index;
char str[256];
} stArr;

class Base
{
private:
static stArr arr;
public:
static void Print();
};

stArr Base::arr = { 0, "a" };

void Base::Print()
{
cout << arr.str[arr.Index] << endl;
}

int main()
{
Base base;
base.Print();

return 0;
}

[解决办法]
class Base
{
private:
static stArr arr;
public:
static void Print();
}//少了个分号
[解决办法]
class Base
{
private:
static stArr arr;
public:
static void Print();
}//看报错啊,都说了缺少一个分号!!

太大意了!!
[解决办法]
int Base::arr.Index = 0;
char Base::arr.str[0] = 'a';

改为:
stArr Base::arr = {0, 'a'};

如果放在print里,就没有定义了,所以链接失败。

静态成员变量需要在类外部定义的。
[解决办法]
两个错误。
一是分号;
二是类内静态结构体的初始化应该是:

stArr Base::arr = { 0, "a" };

[解决办法]
int Base::arr.Index = 0;


char Base::arr.str[0] = 'a';
这里有问题吧?需要 int 和 char ?

读书人网 >C++

热点推荐