Объявление C++ "using" в Visual Studio 2008
Я пытаюсь использовать 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 namespace google :: protobuf;» внутри функции это больше не дает мне ошибки. Что меня смущает, так это то, что это не работает так, как показывает пример Google (и Страуструпа в «Языке программирования C++»).
Ответов (3)3
(1) Согласно Microsoft, C2873 означает;
'symbol': символ нельзя использовать в объявлении using В директиве using отсутствует ключевое слово пространства имен. Это заставляет компилятор неверно интерпретировать код как объявление using, а не как директиву using.
(2) Также, когда у меня был C2873 с C2039 (я пытался объединить CEF3 и Cinder в Visual Studio 2010), я каким-то образом обошел обе ошибки, изменив Properties-> Configuration Properties-> C/C++ -> Code Generation;
Включить минимальную перестройку: Да (/ Gm), Включить исключение C++: Да (/ EHsc), Включить связывание на уровне функций: пусто
Напрямую из документации :
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.