错误:无法在赋值中将“int*”转换为“Pt*”

error:cannot convert ‘int*’ to ‘Pt*’ in assignment

本文关键字:int 转换 Pt 赋值 错误      更新时间:2023-10-16

我是指针用法的新手,遇到了编译错误 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

我试图做的是声明一个包含最初为 0 的int的类,并为该类的 N 提供一个 mem 空间。

感谢您花时间阅读我的问题,任何帮助将不胜感激。

如果没有用户定义的构造函数,您可以像这样对对象进行值初始化:

Pt a = Pt();

a 是类型为 Pt 的对象,其int成员设置为 0

要声明数组,请使用:

Pt* Pa = new Pt[N]();

数组中的N对象是值初始化的,因此不再需要以下for循环。

要编写C++代码,只需

std::vector<Pt> Pa(N);

您没有声明任何名为 T 的类型; 可能在此之前您还有其他错误/警告。

你有多个错误


1)Pa[i]会持有指向pt的指针,所以考虑写Pa[i]->Ph


2)你在这里想做什么不清楚:

Pa = new T[N];

尝试这样的事情:

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

我强烈建议为您的类和变量名称使用更多的字母,并尝试使用有意义的东西。 两个字母打字更快,但如果这是你的理由,请参加键盘课。