Повторное использование класса в файле с main () - PullRequest
1 голос
/ 22 октября 2011

Как я могу повторно использовать класс в файле, в котором уже есть метод main?Например, я хотел бы использовать struct foo, которую другой разработчик написал в foo.cpp в моей собственной программе, main.cpp:

//-- foo.cpp --
struct foo {
  int bar;
};
int main() {
  return 0;
}
//-- end foo.cpp --

//-- main.cpp --
#include "foo.cpp"
int main() {
  foo f;
  f.bar = 1;
  return f.bar;
}
//-- end main.cpp

main.cpp не будет компилироваться с использованием g ++ 4.4.4, что приводит к ошибкам:

main.cpp: In function "int main()":
main.cpp:2: error: redefinition of "int main()"
foo.cpp:4: error: "int main()" previously defined here

Я не могу извлечь метод main из foo.cpp, потому что я не контролирую этот код.В реальной кодовой базе, с которой я имею дело, struct foo более сложна, поэтому я не могу скопировать ее в main.cpp, так как это было бы невозможно поддерживать.

Ответы [ 3 ]

1 голос
/ 22 октября 2011

Используйте определение препроцессора, чтобы превратить main в макрос, который расширяется, например, до not_main, пока вы компилируете foo.cpp; то есть.,

g++ -Dmain=not_main foo.cpp
1 голос
/ 22 октября 2011

Решение без кодирования: поговорите с людьми, которые поддерживают данный код.Предложите им рефакторинг!

1 голос
/ 22 октября 2011

поместите struct foo внутри заголовка

foo.h
#ifndef _STRUCT_FOO
#define _STRUCT_FOO
struct foo {
  int bar;
};
#endif

включайте его везде, где это необходимо.

...