Мне сказали, что эти типы, которые видны там, есть уникальная единица перевода, были нарушены Правилом Единого Определения. Может кто-нибудь объяснить это?
//File1.cpp
#include "StdAfx.h"
static struct S { int Value() { return 1; } } s1;
int GetValue1() { return s1.Value(); }
//File2.cpp
#include "StdAfx.h"
static struct S { int Value() { return 2; } } s2;
int GetValue2() { return s2.Value(); }
// main.cpp
#include "stdafx.h"
extern int GetValue1();
extern int GetValue2();
int _tmain(int argc, _TCHAR* argv[])
{
if( GetValue1() != 1 ) throw "ODR violation";
if( GetValue2() != 2 ) throw "ODR violation";
return 0;
}
Я знаю, как исправить эту проблему. Согласно названию, я искал, почему это было нарушение ODR. Как это нарушает: "В любой единицы перевода шаблон, тип, функция или объект могут иметь не более одного определения".? Или, возможно, это нарушает другую часть правила.