【发布时间】:2015-01-24 00:08:09
【问题描述】:
请看下面我的 c++ 代码的 sn-p。因为 foo.h 在 int main(int argc, char *argv[]) 之前执行,所以数组 RedApple 将被初始化为大小 0 并导致错误。处理这个问题的最佳方法是什么?有没有办法将类声明保留在 foo.h 中,但根据用户输入在 foo.cpp 中对其进行初始化?谢谢!
在 foo.h 中
#include <vector>
extern int num;
class apple
{
std::vector<long> RedApple;
public:
apple(): RedApple(num)
}
在 foo.cpp 中
#include "foo.h"
int num;
int main(int argc, char *argv[])
{
sscanf_s(argv[1],"%d",&num);
}
【问题讨论】:
-
给构造函数一个参数。用它来初始化向量。
-
您能详细说明一下吗?
-
你能告诉我们你的意图是什么吗?您的类定义永远不会在您的代码中使用。请了解如何初始化全局对象/数据! c++ 中没有任何内容可以使句子“foo.h 在”之前执行正确。您的应用程序的启动代码在进入 main 之前初始化所有全局数据。但是初始化的顺序或多或少是未定义的,并且取决于您的编译器和链接器设置以及链接期间文件的顺序。用数字初始化一个向量会创建一个给定大小的向量,而不是里面的值!