Попытка написать конструкторы для наследования подкласса от класса, догадки по синтаксису, ошибка ожидаемого первичного выражения? - PullRequest
1 голос
/ 21 сентября 2011

У меня есть класс Sphere, который наследуется от класса Shape (для домашнего проекта):

В Shape у меня есть три конструктора.Объявления из Shape.h выглядят следующим образом:

Shape();
Shape(Vector);
Shape(Vector, float[]);

Внутри Sphere мои конструкторы наследуются от этих конструкторов.В моем файле Sphere.h есть следующие объявления:

Sphere(): Shape() {}//line 17
Sphere(Vector, float): Shape(Vector) {}//line 18
Sphere(Vector, float, float[]): Shape(Vector, float[]) {}//line 19

Мой синтаксис здесь в основном основан на просмотре шаблонов.Хотя моим первым языком был C ++, меня, к сожалению, обучали другим концепциям, таким как наследование, только в Java.

В любом случае при `make 'у меня появляются следующие сообщения об ошибках:

Sphere.h: In constructor ‘Sphere::Sphere(Vector, float)’:
Sphere.h:18: error: expected primary-expression before ‘)’ token
Sphere.h: In constructor ‘Sphere::Sphere(Vector, float, float*)’:
Sphere.h:19: error: expected primary-expression before ‘,’ token
Sphere.h:19: error: expected primary-expression before ‘float’

CanВы помогаете мне понять эти сообщения и что может быть их причиной?Сначала я попытался дать им возможность выразиться типичным способом, то есть вместо

Sphere(): Shape();

, а затем описал сам конструктор в файле .cc, я сделал то, что видел в некоторых онлайн-уроках, бездействительно понимая, почему:

Sphere(): Shape() {}

Это ничего не изменило, проблема осталась.Спасибо за вашу помощь!

Ответы [ 3 ]

2 голосов
/ 21 сентября 2011

Вам необходимо указать имена, а не только типы, для параметров и передать имена, а не типы. Например:

Sphere(Vector a, float b, float[] c): Shape(a, c) {}
0 голосов
/ 21 сентября 2011

Ваш список инициализации принадлежит реализации конструктора и не является частью объявления конструктора (или прототипа). Вы, кажется, кладете это с обоими.

Вы можете сделать:

// Sphere.h
struct Sphere {
  Sphere();
};

// Sphere.cpp
Sphere::Sphere() : Shape() {

}

Или вы можете сделать:

// Sphere.h
struct Sphere {
  Sphere() : Shape() { }
};

// Sphere.cpp
// No constructor here; you defined it in the header.
0 голосов
/ 21 сентября 2011

Вы не дали своим аргументам конструктора никаких имен.

Это нормально, если вы на самом деле не хотите использовать эти аргументы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...