c ++编译选择错误的命名空间

时间:2013-08-05 18:25:45

标签: c++ string visual-studio-2010 namespaces

我正在为我的项目使用OpenCV库并使用命名空间" cv"和" std"对于我的源文件。我想使用字符串拆分功能根据分隔符拆分字符串。但是" split"函数默认为命名空间" cv"并且显示与错误参数相关的错误,因为它期望与OpenCV slpit函数相关的参数。

可以做些什么来克服这个问题?我看到同一个函数在另一个源文件中运行正常,即使那个函数同时有std和cv空间。

这些是我在两个文件中包含的标题 -

#include "stdafx.h"
#include <unordered_map>
#include <iostream> // for standard I/O
#include <fstream>
#include <string>   // for strings
#include <iomanip>  // for controlling float print precision
#include <sstream>  // string to number conversion

4 个答案:

答案 0 :(得分:10)

避免在代码中加入using namespace std;using namespace cv;,尤其是在标题中。
如果您无法阻止自己,请完全符合您需要的功能,例如

std::split(...)

答案 1 :(得分:2)

只要cvstd函数的参数集是不相交的,就不应该在重载决策中引入任何歧义(两者都会被注入全局命名空间)。

基于显示split来自2013年提案的评论,更有可能的是您的编译器尚未实现std::split

答案 2 :(得分:0)

您需要做的就是在函数前加上'命名空间' 例如

std::split(...);

答案 3 :(得分:0)

您可以通过使用显式名称空间说明符来解决此问题。

std::split