我最近决定在我的项目中包含JavaScript V8引擎。在编译并链接到它之后,我想从Getting Started指南运行示例。
它通常起作用,但由于某些原因,当我没有在每个类名前面指定v8
命名空间时,存在名称空间冲突。例如,Visual Studio 2012告诉我,名称Context
将是不明确的。但我不明白为什么。
我在此文件中包含的唯一命名空间是std
和v8
。这是一个头文件,在您提出之前,它的意思是这样,因为它声称它是一个仅限标题的库。
#pragma once
#include <string>
#include <vector>
#include <map>
#include <unordered_map>
#include <functional>
#include <memory>
#include <typeindex>
#include <iostream>
#include <fstream>
#include <V8/v8.h>
namespace library_name
{
using namespace std;
using namespace v8;
// here comes the example code and more...
}
要找出名称为Context
的符号也可能定义在哪里,我在Visual Studio中使用了Find Definition
命令,可在上下文菜单中找到。这是结果列表。
它列出了我在项目中使用但未在该标题中使用的示例sf::Context
。隐藏名称空间中还有定义位于名为Windows Kits
的目录中的文件中的定义。我既不知道它们的用途,也没有故意将它们包括在内。除了标准库和JavaScript V8之外,我不包括其他头文件,如上所示。
为什么来自不同命名空间的Context
会相互冲突?如何修复此冲突以使用v8
命名空间?
答案 0 :(得分:1)
尝试实际编译代码。编译器应列出实际的冲突符号,可能包括它们实际定义的位置。您需要删除其中一个使用或完全限定标识符。