//my_module.h
struct FF
{
string name;
int num;
};
//my_module.cpp
//и/или
//some_module.h/some_module.cpp
#include "my_module.h"
FF f_f;
extern struct
Выделить всёкод C++
1:
2:
3:
4:
5:
struct FF
{
string Name;
int num;
}f_f;
Есть в проекте ещё один cpp-файл, в котором функция (используемая в основном cpp-файле) принимает и обрабатывает вектор типа vector<FF> и возвращает такой же вектор.
Так проблема в том, что не получается сделать extern struct FF.
Пишу в во втором h-файле
Выделить всёкод C++
1:
extern struct FF f_f;
- ошибка.
Пытаюсь добавить описание структур в него же - то же ошибка.
Как правильно объявить структуру extern?
помещай описания структур и классов в заголовочный файл и подключай там где надо:
Цитата: The_Ice
помещай описания структур и классов в заголовочный файл и подключай там где надо:
Код:
//my_module.h
struct FF
{
string name;
int num;
};
//my_module.cpp
//и/или
//some_module.h/some_module.cpp
#include "my_module.h"
FF f_f;
struct FF
{
string name;
int num;
};
//my_module.cpp
//и/или
//some_module.h/some_module.cpp
#include "my_module.h"
FF f_f;
Сделал как ты сказал.
При линковке ошибка: ""struct FF f_f" (?f_f@@3UFF@@A) already defined in main.obj"
Я в main.cpp заполняю структуру, которую описал в main.h.
А потом в srt.cpp мне нужно передать эту структуру для манипуляции её значениями и вернуть "отманипулированную" обратно в main.cpp.
В srt.cpp делаю #include "main.h" и получаю вышеуказанную ошибку.
Код:
#ifndef MI_Module_H
#define MI_Module_H
/// Здесь мы пишем код модуля
#endif //MI_Module_H
#define MI_Module_H
/// Здесь мы пишем код модуля
#endif //MI_Module_H
В противном случае код модуля генерируется нексолько раз, посему линковщик не может соединить дупликаты воедино.
Код:
#ifndef _MAIN_H_
#define _MAIN_H_
#include <string>
struct FF
{
std::string s;
int i;
};
#endif//_MAIN_H_
#define _MAIN_H_
#include <string>
struct FF
{
std::string s;
int i;
};
#endif//_MAIN_H_
Код:
#include "main.h"
FF f_f;
FF f_f;
Код:
#include "main.h"
extern FF f_f;
extern FF f_f;
извеняйте за пропущенные команды препроцессора - инет собака дорогой :) к тому же - если человек использует модификатор [color=blue]extern[/color], то и про модули, по идее, должен знать :)
Спасибо! Ворде разобрался и всё пошло.