LINUX.ORG.RU

Путаница в переопределении классов

 


0

1

Привет.

Началось все с того, что захотел сделать и думал, что сделал, «локальный» класс, т.е. определил и использовал его в одном .cpp-файле. Много времени спустя случилось так, что создал в том же неймспейсе класс с тем же именем внутри другого .cpp-файла, и эти классы перемешались.

Минимальный пример для воспроизведения:

2.h:

#ifndef _2_H_
#define _2_H_

void foo();

#endif /* _2_H_ */
2.cpp:
#include<stdio.h>

class test{
public:
 void foo(){printf("test::foo()\n");}
};

void foo(){
 xx::test t;
 t.foo();}
1.cpp:
#include<stdio.h>
#include"2.h"

class test{
public:
 virtual /* (1) */ void foo(){printf("ta-dam!\n");}
};

int main(){
 test(); /* (2) */
 foo();
 return 0;}

Итак. Если оставляем все как есть, программа печает тадам. Если убираем создание объекта (2), или виртуальность (1), программа печатает тест::фуу. Это нормально? И как таки правильно определить «локальный» класс?

gcc (Gentoo 4.6.3 p1.3, pie-0.5.2) 4.6.3

★★★★★

Последнее исправление: staseg (всего исправлений: 2)

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.