C++ C++;:如何从名为funA()的函数中的头文件调用函数(比如funA())?

C++ C++;:如何从名为funA()的函数中的头文件调用函数(比如funA())?,c++,function,namespaces,overloading,name-conflict,C++,Function,Namespaces,Overloading,Name Conflict,我想从我函数中的头文件调用一个函数reverse(BidirectionalIterator first,BidirectionalIterator last),它的名称也是reverse(int) 代码: #包括 #包括 使用名称空间std; 类解决方案{ 公众: 反向整数(整数x){ string num=到_字符串(x); 反向(num.begin(),num.end()); } }; 我认为它会根据传递的参数自动调用相应的函数,就像函数重载一样。但事实并非如此 我试过: 名称空间算法{

我想从我函数中的
头文件调用一个函数
reverse(BidirectionalIterator first,BidirectionalIterator last)
,它的名称也是
reverse(int)

代码:

#包括
#包括
使用名称空间std;
类解决方案{
公众:
反向整数(整数x){
string num=到_字符串(x);
反向(num.begin(),num.end());
}
};
我认为它会根据传递的参数自动调用相应的函数,就像函数重载一样。但事实并非如此

我试过:

名称空间算法{
#包括
}

但是它给出了很多错误。

啊,现在你正在体验StackOverflow上的人们为什么会这样做。问题是您将整个名称空间引入全局名称空间,这将导致类似这样的冲突

但是,如果删除该行,现在所有导入的函数都保留在
std
命名空间中,因此可以执行以下操作:

#include<iostream>
#include<algorithm>

// BAD
// using namespace std;

class Solution{
public:
    int reverse(int x){
        std::string num = std::to_string(x);
        std::reverse(num.begin(), num.end());
        return std::stoi(num); // Don't forget to return!
    }
};
#包括
#包括
//坏的
//使用名称空间std;
类解决方案{
公众:
反向整数(整数x){
std::string num=std::to_string(x);
std::reverse(num.begin(),num.end());
return std::stoi(num);//别忘了返回!
}
};

啊,现在你正在体验StackOverflow上的人被攻击的原因。问题是您将整个名称空间引入全局名称空间,这将导致类似这样的冲突

但是,如果删除该行,现在所有导入的函数都保留在
std
命名空间中,因此可以执行以下操作:

#include<iostream>
#include<algorithm>

// BAD
// using namespace std;

class Solution{
public:
    int reverse(int x){
        std::string num = std::to_string(x);
        std::reverse(num.begin(), num.end());
        return std::stoi(num); // Don't forget to return!
    }
};
#包括
#包括
//坏的
//使用名称空间std;
类解决方案{
公众:
反向整数(整数x){
std::string num=std::to_string(x);
std::reverse(num.begin(),num.end());
return std::stoi(num);//别忘了返回!
}
};

不要使用
名称空间标准。相反,使用
std::reverse
来明确表示。更多阅读:尝试将整个头粘贴到任意名称空间不会同时将该头的实现放在同一个任意名称空间中。您还需要更改该头文件的源代码(在本例中是标准C++库源代码),并重新编译该库。或者,不要去那里。@Eljay你能解释一下为什么函数重载在这里不起作用吗?这里没有函数重载。解决方案只有一个成员函数:
int reverse(int)
,它需要一个
int
参数。当编译器尝试匹配
reverse(num.begin(),num.end())时
int reverse(int)
它不匹配,因此编译器发出错误。相反,使用
std::reverse
来明确表示。更多阅读:尝试将整个头粘贴到任意名称空间不会同时将该头的实现放在同一个任意名称空间中。您还需要更改该头文件的源代码(在本例中是标准C++库源代码),并重新编译该库。或者,不要去那里。@Eljay你能解释一下为什么函数重载在这里不起作用吗?这里没有函数重载。解决方案只有一个成员函数:
int reverse(int)
,它需要一个
int
参数。当编译器尝试匹配
reverse(num.begin(),num.end())时
to
int reverse(int)
它不匹配,因此编译器发出错误。