读书人

怎么用一个类中的变量去初始化另一个类

发布时间: 2013-11-15 22:28:15 作者: rapoo

如何用一个类中的变量去初始化另一个类中的静态变量?
//
class query{
public:
void printquery() { cout <<"_query: " << _query << endl;}
static void set_query( int &a) { _query = a; }
protected:
static int _query;
};


//
class textquery{
public:
void set_int( int &a ) { text = a; }
void print() {
query::set_query( text);
query q1;
q1.printquery();
}
protected:
int text;
};


// main
#include "textquery.h"
#include <iostream>
using namespace std;

int main()
{
textquery tq1;
int i = 10;
tq1.set_int( i );
tq1.print();
cin >>i;
}

怎么改?
[解决办法]
class query{
public:
void printquery() { cout <<"_query: " << _query << endl;}
static void set_query( int &a) { _query = a; }
protected:
static int _query; // 这里只是静态变量的申明,并没有定义,初始化,也就是说无法给他分配内存空间。
};
所以必须要在内外写上一句int query::_query定义初始化。
另外:全局变量、静态变量的初始化是在main()函数之前执行的,也就是说这个语句int query::_query在mian函数之前执行的,你现在都没有,肯定会报错。
综合以上两点,要达到你的目的基本上是不可能的。


[解决办法]
静态变量要先初始化后才能使用,可以在main()函数外部先初始化就可以用了。

// vvvv.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

//
class query{
public:
void printquery() { cout <<"_query: " << _query << endl;}
static void set_query( int &a) { _query = a; }
protected:
static int _query;
};


//
class textquery{
public:
void set_int( int &a ) { text = a; }
void print() {
query::set_query( text);
query q1;
q1.printquery();
}
protected:
int text;
};


// main
//#include "textquery.h"

int query::_query = 0;//相当于定义下,分配内存空间

int main()
{
textquery tq1;
int i = 10;
tq1.set_int( i );
tq1.print();
cin >>i;
}



上面代码已经测试通过,输出:
_query = 10

读书人网 >C++

热点推荐