2016-01-25 2 views
1

Использование вектора с использованием пространства имен неверно. Возможно, это опечатка. Пожалуйста, измените следующее. Использования станд :: вектор Я должен следующий код:Vector by referece in constructor: неинициализированная ссылка

class MyClass{ 

private: 

std::vector<float>& myvector; 

public: 

MyClass(int k,std::vector<float>& vector){ 

(...) 

this->myvector=vector; 

(...) 

} 

создать объект MyClass, как это:

(...) 

std::vector<float> vector; 
vector.reserve(k); 

(...) 

MyClass A= MyClass(k,vector); 

(...) 

ошибка выскакивает говорит мне MyVector неинициализированной ссылки. Я просто хочу, чтобы MyClass сохранил некоторые данные в MyVector и вернул его. Должен ли я использовать указатели вместо этого ?.

Благодаря

+2

В этом коде 'myvector' не является ссылкой на всех. Вы уверены, что разместили правильный код? Или вы можете показать точную ошибку, которую вы получаете? –

+2

Не могли бы вы отправить точный код, потому что здесь есть также синтаксическая ошибка в std: vector DrDonut

+0

Исправлена ​​ошибка, спасибо. Сообщение об ошибке: ошибка: неинициализированный ссылочный элемент «MyClass :: myvector» [-fpermissive] – javierjsa

ответ

3

Вы должны использовать constructor initializer list:

MyClass(int k, std::vector<float>& v) 
    : myvector(v) 
{ 
    (...) 
} 

Также не следует использовать имя типа в качестве имени переменной/параметра.

Это большое объяснение от user3159253

members of the class are initialized before constructor body. So if you don't initialize them explicitly, they're initialized with their respective default constructors. This is often Ok for most datatypes (although they would be initialized twice, once with default constructor and the second time in the body), but not with references which don't have default constructors at all

+0

Некоторые объяснения: члены класса инициализируются телом _before_ constructor. Поэтому, если вы не инициализируете их явно, они инициализируются соответствующими конструкторами по умолчанию. Это часто бывает нормально для большинства типов данных (хотя они будут инициализированы дважды, один раз с конструктором по умолчанию и второй раз в теле), но не со ссылками, которые вообще не имеют конструкторов по умолчанию. – user3159253