Определите прототип функции с std :: vector в качестве входного параметра в заголовке - PullRequest
2 голосов
/ 30 сентября 2011

Я схожу с ума, так как не могу определить прототип функции, которую на самом деле использую.Что я делаю, это создаю файл заголовка с именем func1.h, где я определяю этот прототип (потому что мне нужно вызывать эту функцию из какой-то другой функции, реализованной в другом месте):

void FileVector(std::vector<Files> &,const char*,bool);

Где Filesструктура, определенная в func1.cpp

struct Files{
        HANDLE h;
        WIN32_FIND_DATA info;
        } file;

У меня также есть другая функция, которая принимает std::vector<Files> & в качестве входного параметра, но когда я пытаюсь скомпилировать (используя Eclipse C ++), я получаю эти ошибки:

/FileVector.h:11:22: error: variable or field 'FileVector' declared void
..\/FileVector.h:11:17: error: 'vector' is not a member of 'std'
..\/FileVector.h:11:29: error: 'Files' was not declared in this scope

Я попытался включить несколько директив в заголовочный файл ... например, объявление структуры в заголовке и включение векторного заголовка делают свое дело, но так я получил множество «нескольких определений / сначала определенных здесь»" ошибка.Что я могу сделать?

РЕДАКТИРОВАТЬ

Теперь мой заголовок выглядит так:

#ifndef FILEVECTOR_H_
#define FILEVECTOR_H_
#include <vector>
#include <windows.h>

 struct Files{
        HANDLE h;
        WIN32_FIND_DATA info;
        };

 void FileVector(std::vector<Files> &,const char*,bool);

 #endif /* FILEVECTOR_H_ */

На данный момент мне нужно объявить еще один прототип в другом заголовке:

void ProcessInput(vector<Files>&);

но я не могу использовать тот же трюк, что и выше, потому что мне придется переопределить структуру файлов.Как я могу решить это?

1 Ответ

4 голосов
/ 30 сентября 2011

Не забудьте включить <vector> в заголовочный файл.Вы также упоминаете, что определение Files находится внутри файла cpp, вам также следует переместить его в заголовок.

Также установите надлежащие защитные колонтитулы, чтобы избежать множественных ошибок определения:

#ifndef MY_HEADER_FILE_GUARD
#define MY_HEADER_FILE_GUARD

... your content here ...

#endif /*MY_HEADER_FILE_GUARD*/

Обновление: Просто добавьте filevector.h из вашего нового заголовка.Однако, похоже, что Files должен быть определен в собственном заголовке и включен из двух заголовков, которые его используют.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...