3
次のコードが不正なのはなぜですか?名前空間に定義された関数のオーバーロード
#include <iostream>
using namespace std;
namespace what {
void print(int count) {
cout << count << endl;
}
}
void what::print(const string& str) {
cout << str << endl;
}
int main() {
what::print(1);
what::print("aa");
return 0;
}
打ち鳴らすと-std=c++14
でコンパイルするとき、私は取得エラーが
error: out-of-line definition of 'print' does not match any declaration in namespace 'what'
である私は、問題への修正を知っているが、コンパイラがprint
(私は関数を定義しようとしていますことを考えて、なぜ私が疑問に思って)の代わりにそれをオーバーロードします。構文
void what::print(const string& str)
は基本的に、あなたならば、ここで
をprint
関数を定義し、what
名前空間内の
を言っているので、それはあなたのために働いていない理由がある
"関数のオーバーロードは互いに同じ名前空間にある必要があります。"しかし、 '何が::何をしようとしているのか?私は強調しているのは同じスコープ*で*あるべきだと思います。異なる名前空間から関数をオーバーロードしようとするのは確かに異なるスコープです。 –
@ Mr.Llamaは私の答えを修正しました。 –
@ Mr.Llamaまさに私はこの質問をしました! – Curious