我最近决定在我的项目中包含JavaScript V8引擎。编译并链接到它之后,我想运行Getting Started指南中的示例。
它通常可以工作,但是由于某些原因,当我没有在每个类名前面指定v8
名称空间时,就会出现名称空间冲突。例如,Visual Studio2012告诉我,名称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
名称空间?
发布于 2013-03-30 19:23:11
尝试实际编译代码。编译器应该列出实际冲突的符号,可能包括它们实际定义的位置。您需要删除其中一项使用,或者完全限定标识符。
https://stackoverflow.com/questions/15722440
复制相似问题