0
この状況を考えてみましょう:元の関数のうちの1つをオーバーロードする関数を持つヘッダーファイルをインクルードするまでうまくいくコードを記述します。この場合、パラメータのより良い適合のために関数の呼び出しがオーバーロードされたバージョンに行き、論理的に予期せぬ場所があるかもしれません。さらに悪いことに、コンパイラは不平を言っていません。ここでC++でヘッダーファイルをインクルードするときに間違ったオーバーロードを解決する方法
は私の質問を明確にするデモです:
/*
For simlicity, I write the codes in different files in this way;
Whether include header.h behaves differently
*/
// main.cpp
#include "header.h" // If included, sb will be overloaded
#include<iostream>
void sb(int){std::cout << "int" << endl;}
int main(){
sb(3.5);
return 0;
}
// header.h
void sb(double);
// hehe.cpp
void sb(double){cout << "double" << endl;}
私は、この問題が頻繁にか起こるかわかりませんし、それを解決または防止するために、どのような方法があるかどうかだろう。
あなたは、名前空間のことを聞いたことがありますか? – StoryTeller
適切なプログラミング方法(名前空間、クラスなど)を使用する - すべての関数を同じ名前空間に入れることは、災害のためのレシピです – UnholySheep
これらの関数を異なる名前空間に入れないのはなぜですか? –