私はC++を初めて使い、1つの定義ルールを理解しようとしています。以下のtest.hファイルを複数のC++ファイルに含めると、1つの定義ルール(syspathとタグ)が失敗します。なぜそうでないのであれば?これは1つの定義ルールに違反しないのはなぜですか?
#ifndef TEST_H
#define TEST_H_
#include <string>
#include <unordered_set>
namespace X {
class Test {
public:
// Default constructor.
Test();
~Test();
const std::string& syspath() const { return syspath_; }
const std::unordered_set<std::string> tags() const { return tags_;}
private:
std::string syspath_;
std::unordered_set<std::string> tags_;
};
} // namespace X
#endif // TEST_H_
なぜ*このルールに違反しますか?あなたの特定の懸念事項を指摘しない限り、問題は無意味です。なぜ2 + 2が5でないのか聞いてみるのと同じです。 – AnT
マクロ( '#ifndef'、' #define'と '#endif')はODRを違反しないようにします。 –
@FranciscoGallegoSalido私は彼がそれについて話しているとは思わない。これはコンパイルされますか? –