我打算初始化一个指向“Port.h”类对象数组的指针。为此,首先初始化一个类型为“Port”的指针,然后为该数组的每个元素调用该类的构造函数。
int main(){
Port *ports;
for (int m = 0; m < M; m++){
// Initialize
ports[m] = Port(***PARAMETERS***);
// ...
}
// ...
}
运行代码时出现以下错误:
错误C4700:未初始化的本地变量'ports'已使用
答案 0 :(得分:2)
在开始将指针加载到数组之前,需要初始化数组本身:
Port *ports = new Port[M];
但是,您的类缺少默认构造函数,因此上述声明将不起作用。您可以改为创建一个指针数组,并像这样使用它:
Port **ports = new Port*[M];
将数据放入指针数组时,需要使用运算符new
:
ports[m] = new Port(***PARAMETERS***);
// ^^^
由于ports
现在拥有指针,因此您需要使用指针语法来访问Port
的成员:
ports[m]->memberFunction(param1, param2); // Note the use of '->' in place of a dot '.'
使用完阵列后,需要delete
各个Port
个对象,然后delete[]
ports
数组以避免内存泄漏:
for (int m = 0 ; m != M ; m++) {
delete ports[m];
}
delete[] ports;
注意:现在有很多代码专门用于管理内存。为避免编写此代码,请使用标准集合和智能指针。
答案 1 :(得分:1)
至少,你应该为该指针分配一个区域:
#define M 15 /* or whatever you want */
Port *ports = new Port[M];
请稍后忘记delete
数组,或许可以使用
main
delete[] ports;
但我相信你不应该使用指向数组区域的指针,而应该使用向量,例如
std::vector<Port> ports;
详细了解std::vector。您可能想要调用其resize
或其push_back
或emplace_back
方法(假设C++11)。因此,如果您可以构建一些Port(12,"abc");
,您可以调用:
ports.emplace_back(12,"abc");
在ports
向量的末尾构建并添加此类端口。
答案 2 :(得分:1)
错误消息足够清楚:变量端口未初始化
Port *ports;
所以它有任意价值。
您需要为要使用的阵列分配内存。例如
Port *ports = new Port[M];
如果不使用动态分配的数组,你会使用类std :: vector会更好。例如
std::vector<Port> ports( M, Port(***PARAMETERS***) );