我正在为一个公司项目改变一个大类的类实现,该项目有几个静态变量被声明为该类的私有成员。在类头中声明了许多使用这些静态变量的数组和结构。我现在需要以某种方式从我的main函数中分配静态数据成员值。我尝试通过构造函数分配静态变量,但是在构造函数调用之前声明了标头,这是不可能的。
例如,如果我有
class Data
{
private:
static unsigned int numReadings = 10;
static unsigned int numMeters = 4;
unsigned int array[numMeters];
}
我想改变它,以便我可以以某种方式从我的main函数设置numReadings和numMeters,因此它将允许我的所有数组和使用numMeters和numReadings的结构正确初始化。
有没有办法在C ++中执行此操作?当然,我总是可以改变我的类设计,并在构造函数中以某种方式设置它们,但我想避免这种情况,因为它可能需要相当长的时间。
答案 0 :(得分:0)
您是否尝试过公开并使用Data :: numReadings = 10?
访问它们更新:
#include <cstdlib>
using namespace std;
/* * */
class Asdf
{
public:
static int a;
};
int Asdf::a = 0;
int main(int argc, char** argv) {
Asdf::a = 2;
return 0;
}
答案 1 :(得分:0)
无论这些变量是否可访问,您都需要在类定义之外定义和初始化静态成员:
#!/bin/bash
#What can I add here to hide current process ($$) and to release focus ?
start_server()
{
#my script here with infinite loop ...
}
这是类的实现的一部分,不应该在标题中(ODR规则)。
当然,如果您想从外部访问这些变量(在类的所有实例之间共享),您需要将它们公开或更好地预见和访问。
修改:
由于围绕静态问题制定了问题,我没有注意到变量长度数组:这不是标准的c ++,尽管有些编译器可能会接受它作为非标准扩展。
要正确执行此操作,您应该定义一个向量并在构造时初始化它:
// header
class Data
{
private:
static unsigned int numReadings;
static unsigned int numMeters;
unsigned int array[numMeters]; //<=see edit
};
// class implementation file
unsigned int Data::numReadings = 10;
unsigned int Data::numMeters = 4;
答案 2 :(得分:0)
你不能在主函数中 ,但你可以在main.cpp文件中执行:
// Main.cpp
#include <iostream>
#include "T.h"
using namespace std;
int T::a = 0xff;
int main()
{
T t; // Prints 255
return 0;
}
// T.h
#pragma once
#include <iostream>
using namespace std;
class T {
public:
T() { cout << a << endl; }
private:
static int a;
};