+146
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
// file.h
template <class T>
void gg (T i)
{
a = i;
}
// file1.cpp
#include "file.h"
static int a;
...
gg (a);
// file2.cpp
static int a;
...
gg (a);
// компилюем, линкуем - где напёрсточек^W^W в какое a стучится gg<int>?
>Мне тут некоторые граждане, на пару с некоторыми компиляторами и стандартом наперевес, пытались неубедительно доказывать, что-де такого не позволяет ODR, но пояснить свою мысль в математически непротиворечивой форме что-то не получилось. А между тем, не грех было бы взять пример с презренного пхп и заставить программизда все глобальные переменные, используемые в какой-либо функции, специфицировать в ней явным образом.
Запостил: CPPGovno,
21 Августа 2011
Esper 21.08.2011 19:59 # +1
Инклюд следует переставить после объявления a. И это уже будет симптомом.
Про file2.cpp вообще нифига не понятно.
Также полезно понимать разницу между статическими и глобальными переменными.
Безграмотно, уродливо, с распальцовкой. Минуснул.
Dummy00001 21.08.2011 21:11 # +2
Govnoeb 22.08.2011 09:31 # +1
за -> Также полезно понимать разницу между статическими и глобальными переменными
+1
SmackMyBitchUp 22.08.2011 11:42 # −1