Dziwny błąd przy wywołaniu metody z innej klasy

0

Hey. Mam sprawę rodem z archiwum X :). Mam klasy Serwer i Połączenie (dla każdego nowego połączenia tworzony jest egzemplarz klasy Połączenie. Klasa Serwer ma listę tych obiektów w wektorze). W klasie Połączenie mam metodę send

template<class TMessage> void Connection::send(TMessage & message) { //TMessage to obiekt np typu Ping, Tekstowa itd. 
    QByteArray sendArray;
    QDataStream out(&sendArray, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_5_1);
    out << message; //serializacja
    socket->write(sendArray); //wysylanie
    socket->waitForBytesWritten();
}

Chodzi o to że gdy wywołam tę metodę z klasy Połączenie (Connection) to wszystko działa. Gdy natomiast wywołam ją z klasy Serwer (tak jak poniżej) to wywala błąd:

    Ping ping;
    clients[ID]->send(ping);
Server.obj:-1: błąd: LNK2019: unresolved external symbol "public: void __cdecl Connection::send<class Ping>(class Ping &)" (??$send@VPing@@@Connection@@QEAAXAEAVPing@@@Z) referenced in function "private: void __cdecl Server::sendClientOnlineList(short)" (?sendClientOnlineList@Server@@AEAAXF@Z)

Dodam że komunikacja Połączenie -> Serwer odbywa się za pomocą sygnałów i slotów (wysyłam sygnał z klasy Połączenie do slotu w klasie Serwer

0
  1. Jeśli nie modyfikujesz parametru tej metody to:
template<class TMessage> void Connection::send(const TMessage & message)
  1. W klasie serwer powinienes miec stworzony obiekt Connection i korzystajac z tego obiektu musisz wywolac send np.:
Connection connection(jakies parametry);
connection.send(...)

lub:

clients[ID]->connection->send(ping);

lub

clients[ID]->getConnection()->send(ping);

nie wiem jak masz zaprojektowaną klasę klienta

dodanie znaczników <code class="cpp"> - Furious Programming

0

No chodzi o to że nie mogę wywołać tej metody z poza klasy w której jest zdefiniowana. Mogę wywołać tę metodę z poziomu Connection ale z poziomu Server już nie. Chyba ma to jakiś związek z szablonami (widocznością?). Tutaj więcej kodu:

class Connection : public QObject
{       
    Q_OBJECT
    
signals:
    void removeConnection(qint16 ID);
        
private slots:
    void read();
    void disconnected();

public:
    Connection(qintptr descriptor, qint16 id, QObject * parent = 0);

    template<class TMessage> void send(TMessage & message);
    void disconnect();
    qint16 getID() const;
    QTcpSocket * getSocket() const;     
    
    virtual ~Connection();

private:
    QTcpSocket * socket;
    //inne pola
 
     //z tej klasy mogę wywołać send() 
};

Ale gdy w klasie serwer ją wywołamy tak jak w 1 poście to wywali ten błąd.

0

Powiedzcie mi proszę bo mnie już #$^&* strzela, co się dzieje się że taki kod na ideone się kompiluje bez problemu a u mnie na Visualu wywala errory:

http://ideone.com/NlrQwd

Client.obj:-1: błąd: LNK2019: unresolved external symbol "public: __cdecl Message<class ConfigurationMessage>::Message<class ConfigurationMessage>(class ConfigurationMessage *)" (??0?$Message@VConfigurationMessage@@@@QEAA@PEAVConfigurationMessage@@@Z) referenced in function "public: void __cdecl Client::sendHelloMessage(class QString const &)" (?sendHelloMessage@Client@@QEAAXAEBVQString@@@Z)
release\Klient.exe:-1: błąd: LNK1120: 1 unresolved externals

Co to za bugi?

1 użytkowników online, w tym zalogowanych: 0, gości: 1