Ahoj,
narazil jsem na podivné chování jazyka C++. Mám dva soubory proc1.cpp a proc2.cpp. V obouch dvou je třída stejného názvu IMP s implementací něčeho, která je zvenčí nepřístupná, proc1.cpp a proc2.cpp vzájemně nevědí co je v tom druhém. Ven jsou vytaženy jen funkce proc1() a proc2() které používají ty třídy IMP s implementací. Potíž je že z proc2 se volá blbý konstruktor, měl by se volat kontruktor IMP z proc2, ale volá se konstruktor IMP z proc1. Samozřejmě když se každá ta třída jmenuje jinak, tak problém zmizí. Není mi ale jasné proč když se jmenujou stejně to takhle blbne, když jsou ty třídy kompletně oddělený. Nejdřív jsem z toho vinil překladač (Visual Studio 6), ale v GCC to dělá taky. Dovede to někdo vysvětlit?
// proc1.cpp :
#include <stdio.h>
class IMP {
public:
IMP() { printf("Tady konstruktor z proc1.cpp\n"); }
int a;
int b;
};
void proc1()
{
printf("Volam konstruktor z proc1.cpp\n");
IMP* imp = new IMP;
delete imp;
}
// proc2.cpp :
#include <stdio.h>
class IMP {
public:
IMP() { printf("Tady konstruktor z proc2.cpp\n"); }
int a;
};
void proc2()
{
printf("Volam konstruktor z proc2.cpp\n");
IMP* imp = new IMP;
delete imp;
}
// main.cpp :
#include <stdio.h>
extern void proc1();
extern void proc2();
int main(int argc, char* argv[])
{
proc1();
proc2();
getchar();
return 0;
}
A po spuštění to vypíše:
Volam konstruktor z proc1.cpp
Tady konstruktor z proc1.cpp
Volam konstruktor z proc2.cpp
Tady konstruktor z proc1.cpp
?