2016-07-06 13 views
1

ソケットクライアントサーバーを作成しましたが、mythread.hファイルにソケットベクトルリストを作成します。修正することはできません。C2227:左に ' - > send'のクラス/構造体/共用体/ジェネリック型を指す必要があります

コード:

for (int i = 0; i < v_->size(); i++) 
{ 
    if(((MYThread *)(v_)[i])->user_id_ != user_id_) 
    { 
     ((MYThread *)(v_)[i])->send(strArray); 
    } 
} 

エラー:

D:\My_Socket\My_Socket\server\server\mythread.cpp:101: error: C2440: 'type > cast': cannot convert from 'std::vector>' to > 'MYThread *' with [ _Ty=MYThread * ]

D:\My_Socket\My_Socket\server\server\mythread.cpp:101: error: C2227: left of '->user_id_' must point to class/struct/union/generic type

mythrad.hファイル

#ifndef MYTHREAD_H 
#define MYTHREAD_H 

#include <QListWidget> 
#include <QObject> 
#include <QTcpSocket> 
#include <QAbstractSocket> 
#include <QDebug> 
#include <vector> 
#include <QThread> 
#include <QString> 
#include <QPixmap> 

class MYThread : public QThread 
{ 
public: 
explicit MYThread(QThread *parent = 0); 
explicit MYThread(QTcpSocket *socket, QListWidget *list, std::vector<MYThread *> *v, int user_id); 

void doConnect(); 
void send(QByteArray data); 

signals: 

public slots: 
void connected(); 
void disconnected(); 
void bytesWritten(qint64 bytes); 
void readyRead(); 
void quitThread(); 
private: 
QTcpSocket *socket_; 
QListWidget *list_; 
std::vector<MYThread *> *v_; 

MYThread *tt; 

void run(); 

QPixmap *pixmap; 
MYThread *socket; 

public: 
int user_id_; 


}; 

#endif // MYTHREAD_H 
+1

http://en.cppreference.com/ w/cpp/language/operator_precedence – chris

+0

エラーメッセージを読みやすくするようにフォーマットしてください。 –

+0

v_はベクトルではなく、ベクトルへのポインタです。要素の1つにアクセスしようとする前に、まず逆参照する必要があります。 – RobbieE

答えて

3
((MYThread *)(v_)[i])->user_id_ 

MYThread *にv_を変換し、そのderefence次いでアレイとのi番目の要素を見つけるためにiとポインタ演算を実行しようとします。何が欲しいのは

v_[i]->user_id_ 

である - 編集 -

v_のあなたの解明に基づき次のとおりです。

(*v_)[i]->user_id_ 

http://ideone.com/XxuVjE

+0

私はstd :: vectorとしてv_を定義しました * v_; mythread.hファイルではソケットのリストです。私はMyThreadに変換できません。* – amir

+0

@amir私の編集 – kfsone

+0

tyを参照してください。しかし今、このエラーが出ます:未解決の外部シンボル "public:........私は実行しますqmakeは修正されていません。デバッグフォルダを削除しようとしましたが、同じエラーが発生しました。 – amir

関連する問題