如何用一个类中的变量去初始化另一个类中的静态变量?
//
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