Я новый пользователь 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.
Что вам нужно, это список инициализатора:
myClass::myClass (string videoFileName) : myCapture(videoFileName) {
}
Это построит myCapture
используя его конструктор, который принимает string
аргумент.
Если вы хотите, чтобы 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)
{
}