Szablony (problem: Undefined reference to...)
Ostatnio zmodyfikowano 2014-12-15 15:36
kitsss Temat założony przez niniejszego użytkownika |
Szablony (problem: Undefined reference to...) » 2014-12-15 14:16:34 PLIK qwerty.hpp: #ifndef qwerty_hpp #define qwerty_hpp
#include <iostream>
namespace My { template < class Type > class Own_Complex { Type Re; Type Im; public: Own_Complex( Type Re_ = 0.0, Type Im_ = 0.0 ) : Re( Re_ ) , Im( Im_ ) { } friend std::ostream & operator <<( std::ostream & strum, My::Own_Complex < Type > & object ); }; template < class Type > std::ostream & operator <<( std::ostream & strum, My::Own_Complex < Type > & object ) { strum << object.Re << "\n" << object.Im << std::endl; return strum; } }
#endif
PLIK MAIN.CPP: #include <iostream> #include "qwerty.hpp"
int main() { My::Own_Complex < double > object( 5.5, 14.345 ); std::cout << object; return 0; }
Error: ...\main.cpp|10|undefined reference to `My::operator<<(std::ostream&, My::Own_Complex<double>&)'| |
|
darko202 |
» 2014-12-15 15:24:14 |
|
Monika90 |
» 2014-12-15 15:31:03 Usuń deklarację zaprzjaźnionego operatora <<, i zdefiniuj << jako szablon przy użyciu publicznych funkcji klasy, które dają dostęp do składowych Re i Im.
Moższ też usuąć szablon i zdefiniować zaprzyjaźniony operator wewnątrz klasy, ale pierwsza opcja wydaje mi się lepsza, zgodnie z zasadą, że im mniej funkcji ma dostęp do składowych prywatnych, tym lepiej. |
|
kitsss Temat założony przez niniejszego użytkownika |
» 2014-12-15 15:36:49 Ok, popracuję. Na razie udało mi się ten sam kod skompilować w jednym pliku. Z taką różnicą, że deklarując przyjaźń w klasie Own_Complex wklejam ciało przeładowania operatora << (niby wtedy nie jest ono składnikiem klasy, a oszukuje kompilator).
|
|
« 1 » |