В последнее время я решил включить JavaScript V8 Engine в свой проект. После компиляции и привязки к нему я хотел запустить пример из руководства 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
может быть определен также, я использовал Find Definition
команды в Visual Studio, доступной в контекстном меню. Это список результатов.
В нем перечислены, например sf::Context
, который я использую в проекте, но не в этом заголовке. Существуют также определения в критических пространствах имен, расположенных в файлах в каталоге с именем Windows Kits
. Я не знаю, для чего они предназначены, и я не включил их намеренно. Я не включаю другие файлы заголовков, кроме стандартной библиотеки и JavaScript V8, как показано выше.
Почему числа Context
s из разных пространств имен сталкиваются друг с другом? Как исправить эти конфликты, чтобы использовать пространство имен v8
?
Используйте имя пространства имен. Для этого нужны пространства имен. –
Я использую эту строку 'using namespace v8;'. И я не могу понять, откуда взялись другие классы под названием «Контекст». – danijar
Используйте имя пространства имен как часть квалифицированного имени. Использование деклараций, как вы видели, приводит к таинственным конфликтам. –