1

我正在尝试使用 google protobuf,他们有以下示例:

using google::protobuf;

protobuf::RpcChannel* channel;
protobuf::RpcController* controller;
SearchService* service;
SearchRequest request;
SearchResponse response;

void DoSearch() {
  // You provide classes MyRpcChannel and MyRpcController, which implement
  // the abstract interfaces protobuf::RpcChannel and protobuf::RpcController.
  channel = new MyRpcChannel("somehost.example.com:1234");
  controller = new MyRpcController;

  // The protocol compiler generates the SearchService class based on the
  // definition given above.
  service = new SearchService::Stub(channel);

  // Set up the request.
  request.set_query("protocol buffers");

  // Execute the RPC.
  service->Search(controller, request, response, protobuf::NewCallback(&Done));
}

void Done() {
  delete service;
  delete channel;
  delete controller;
}

当我尝试在 Visual Studio Express 2008 中实现此代码时遇到的错误是:

错误 C2873:“google::protobuf”:符号不能在 using 声明中使用

编辑:当我执行“使用命名空间 google::protobuf;”时 在函数内部它不再给我错误。我感到困惑的是,它不像 Google 的示例(以及 Stroustrup 在“C++ 编程语言”中的示例)似乎表明的那样工作。

4

3 回答 3

4

google::protobuf大概是一个namespace。在这种情况下,您需要这样做。

using namespace google::protobuf;
于 2009-02-26T22:27:54.667 回答
1

直接来自文档

Visual C++ Concepts: Building a C/C++ Program
Compiler Error C2873
Error Message
'symbol' : symbol cannot be used in a using-declaration
A using directive is missing a namespace keyword. This causes the compiler to misinterpret the code as a using declaration rather than a using directive.

有关差异的更多信息。

于 2009-02-27T05:21:58.260 回答
0

(1) 根据微软的说法,C2873 是指;

'symbol' : 符号不能在 using 声明中使用 using 指令缺少命名空间关键字。这会导致编译器将代码误解为 using 声明而不是 using 指令。

(2) 当我有 C2873 和 C2039 时(我试图在 Visual Studio 2010 中合并 CEF3 和 Cinder),不知何故我通过更改 Properties->Configuration Properties->C/C++->Code Generation 绕过了这两个错误;

启用最小重建:是(/Gm),启用 C++ 异常:是(/EHsc),启用函数级链接:空

于 2016-02-18T07:29:09.453 回答