我是指针用法的新手,遇到了编译错误gcc
这是我的代码:
class Pt
{
public:
int Ph;
};
Pt *Pa;
Pa = new T[N];
for(int i=0;i < N; i++)
Pa[i].Ph=0;`
和错误消息:
error: expected type-specifier before ‘T’
error: cannot convert ‘int*’ to ‘Pt*’ in assignment
我要做的是声明一个包含int
的类,该类最初为0,并为该类的N提供一个mem空间。
感谢您抽出时间阅读我的问题,我们将非常感谢您的帮助。
答案 0 :(得分:2)
如果没有用户定义的构造函数,您可以像这样对对象进行值初始化:
Pt a = Pt();
a
是Pt
类型的对象,其int
成员设置为0
。
要声明数组,请使用:
Pt* Pa = new Pt[N]();
数组中的N
个对象是值初始化的,因此不再需要以下for
循环。
要编写C ++代码,只需执行
std::vector<Pt> Pa(N);
答案 1 :(得分:0)
您没有声明任何名为T
的类型;可能你在抱怨之前还有其他错误/警告。
答案 2 :(得分:0)
你有多个错误
1)Pa[i]
将持有指向pt的指针。所以考虑写Pa[i]->Ph
2)你想在这里做的事情不明确:
Pa = new T[N];
答案 3 :(得分:0)
尝试这样的事情:
class Pt
{
public:
Pt() : Ph(0)
{ ; }
int Ph;
};
#define CAPCITY 15U
int main(void)
{
Pt Pa[CAPACITY];
for (unsigned i = 0; i < CAPACITY; ++i)
{
std::cout << "Pa[" << i << "].Ph = " << Pa[i].Ph << endl;
}
return EXIT_SUCCESS;
}
当数组构造类时,class Pt
的初始化列表处理将字段Ph
设置为零。
顺便说一句,与其他语言不同,您不需要为每个变量实例使用new
。
我强烈建议您为类和变量名使用更多字母,并尝试使用有意义的内容。输入两个字母的速度会更快,但如果这是你的理由,请选择一个键盘课。