错误:无法在赋值时将'int *'转换为'Pt *'

时间:2012-11-12 20:16:32

标签: c++

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

感谢您抽出时间阅读我的问题,我们将非常感谢您的帮助。

4 个答案:

答案 0 :(得分:2)

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

Pt a = Pt();

aPt类型的对象,其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

我强烈建议您为类和变量名使用更多字母,并尝试使用有意义的内容。输入两个字母的速度会更快,但如果这是你的理由,请选择一个键盘课。