2017-09-11 6 views
2

ZeroMQでパブリッシャーサブスクライバーモデルを開発しようとしましたが、ここではJSONファイルからオブジェクト値を抽出して相手側に送信しています。ZeroMQパブリッシャーでランタイムエラーを修正する方法

私の加入者のパートは、何らかのエラーを出すことでうまく動作しています。内部

#include "jsoncpp/include/json/value.h" 
    #include "jsoncpp/include/json/reader.h" 
    #include <fstream> 
    #include "cppzmq/zmq.hpp" 
    #include <string> 
    #include <iostream> 
    #include <unistd.h> 

    using namespace std; 

    int main() { 
     zmq::context_t context(1); 
     zmq::socket_t publisher (context, ZMQ_PUB); 
     int sndhwm = 0; 
     publisher.setsockopt (ZMQ_SNDHWM, &sndhwm, sizeof (sndhwm)); 
     publisher.bind("tcp://*:5561"); 
     const Json::Value p; 
     ifstream pub_file("counter.json"); 
     Json::Reader reader; 
     Json::Value root; 

     if(pub_file != NULL && reader.parse(pub_file, root)) { 
     const Json::Value p = root ["body"]["device_data"]["device_status"]; 
     } 

     string text = p.asString(); 
     zmq::message_t message(text.size()); 
     memcpy(message.data() , text.c_str() , text.size()); 
     zmq_sleep (1); 
     publisher.send(message); 
     return 0; 
    } 
+2

*スコープ*について知る必要があります。 'p'という名前の2つの異なる***変数があります。 –

答えて

1
const Json::Value p; 
... 
if(pub_file != NULL && reader.parse(pub_file, root)) { 
    const Json::Value p = root ["body"]["device_data"]["device_status"]; 
} 

string text = p.asString(); 

あなたが作成p:これは出版社のために私のコードです

src/lib_json/json_value.cpp:1136: Json::Value& 
    Json::Value::resolveReference(const char*, bool): Assertion `type_ == 
    nullValue || type_ == objectValue' failed. 
    Aborted (core dumped) 

(if文で):しかし、私は出版社の一部で、以下のエラーが直面していますifステートメントでは、この新しく宣言された変数は、条件付きの{} -code-blockのスコープだけのローカル変数です。すでにp変数宣言にきれいな割り当てに変更してください:

p = root ["body"]["device_data"]["device_status"]; 

はこれがないインナースコープ内に新しいものを宣言し、外側のスコープ内の変数を変更します。また、変数const Json::Value pとしない場合は、constとする必要があります。したがって、条件内で変更することができます。

+0

pub.cpp:31:4:エラー: 'Json :: Value&Json :: Value :: operator =(Json :: Value)'の 'this'引数として 'const Json :: Value'を渡すと修飾子が破棄されます[-fpermissive ] p = root ["body"] ["device_data"] ["device_status"]; –

+0

コンパイル中にこのエラーが発生した場合は、このエラーが発生します。 pub.cpp :(。text + 0x1a8):未定義のJson :: Value :: operator =(Json :: Value ) ' collect2:エラー:ldが1の終了ステータスを返しました –

+0

最初のエラーは、演算子が 'const'とマークされたオブジェクトpを変更することを意味します。したがって、constを取り除かなければなりません。 –

関連する問題