Я новичок в использовании указателя и обнаружил ошибку компиляции 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 этого класса.
Спасибо за время, прочитав мои вопросы, любая помощь будет высоко ценится.
Без определяемого пользователем конструктора вы можете инициализировать значение объекта следующим образом:
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
для каждого экземпляра переменной, в отличие от других языков.
Я настоятельно рекомендую использовать больше букв для имен классов и переменных и постараться использовать что-то осмысленное. Две буквы набираются быстрее, но если это ваше оправдание, возьмите уроки игры на клавиатуре.