Я не совсем уверен, что вы пытаетесь сделать здесь, но если вы хотите создать DoubleLinkedNode с fValue, указывающим на адрес aValue (который был передан конструктору по ссылке), вам нужно определить свой конструктор следующим образом способ:
DoubleLinkedNode( const DataType& aValue ) : fValue(&aValue) {
std::cout << " -- " << aValue << std::endl;
}
Обратите внимание, что это не на 100% безопасно, так как вы можете случайно вызвать этот конструктор со ссылкой rvalue (для упрощения: ссылка на объект, который уничтожается сразу после вызова функции) , Например, следующий код не вызовет ошибку компиляции:
std::string s = "Hello ";
DoubleLinkedNode<std::string> node = DoubleLinkedNode<std::string>(s + "World");
, хотя s + "World"
- это временное значение, которое будет быстро уничтожено после вызова конструктора, и теперь fValue будет указывать на недопустимое расположение в памяти. Это очень плохо, так как вы не получите никаких предупреждений во время компиляции, но вы получите очень трудно отлаживаемое поведение во время выполнения.
Следовательно, может быть лучше создать конструктор, который ожидает указатели вместо ссылок:
DoubleLinkedNode( const DataType* aValue ) : fValue(aValue) {
std::cout << " -- " << aValue << std::endl;
}