член класса является объектом другого класса

Я новый пользователь C ++ …

У меня есть вопрос относительно того, как объявить член класса «classA», который является объектом другого класса «classB», зная, что у «classB» есть конструктор, который принимает строковый параметр (в дополнение к стандартному конструктору). Я провел некоторое онлайн-исследование по этой проблеме, однако это не сильно помогло мне решить проблему, с которой я имею дело.

Чтобы быть более конкретным, я хочу создать класс, который имеет в качестве члена объект VideoCapture (VideoCapture является классом openCV, который предоставляет видеопоток).

Мой класс имеет этот прототип:

class  myClass {
private:

string videoFileName ;

public:

myClass() ;

~myClass() ;

myClass (string videoFileName) ;
// this constructor will be used to initialize myCapture and does other
// things

VideoCapture myCapture (string videoFileName /* :  I am not sur what to put here */ )  ;

};

Конструктор:

myClass::myClass (string videoFileName){

VideoCapture myCapture(videoFileName) ;
// here I am trying to initialize myClass' member myCapture BUT
// the combination of this line and the line that declares this
// member in the class' prototype is redundant and causes errors...

// the constructor does other things here... that are ok...

}

Я приложил все усилия, чтобы раскрыть мою проблему самым простым способом, но я не уверен, что мне удалось …

Спасибо за вашу помощь и ответы.

L.

0

Решение

Что вам нужно, это список инициализатора:

myClass::myClass (string videoFileName) : myCapture(videoFileName) {
}

Это построит myCapture используя его конструктор, который принимает string аргумент.

2

Другие решения

Если вы хотите, чтобы VideoCapture был членом класса, вам не нужно это в определении класса:

VideoCapture myCapture (string videoFileName /* :  I am not sur what to put here */ )  ;

Вместо этого вы хотите это:

VideoCapture myCapture;

Затем ваш конструктор может сделать это:

myClass::myClass (string PLEASE_GIVE_ME_A_BETTER_NAME)
: myCapture(PLEASE_GIVE_ME_A_BETTER_NAME),
videoFileName(PLEASE_GIVE_ME_A_BETTER_NAME)
{
}
1

По вопросам рекламы [email protected]