Ошибки C ++, возможно, из .h файлов, не уверен

0

Хорошо, я пытаюсь скомпилировать программу:

g++ -std = С++ 0x a1test.cpp GS1Prefix.cpp EAN.cpp

Но я получаю ошибки, которых я никогда раньше не видел.

In file included from a1test.cpp:17:0:
EAN.h:3:25: error: âPrefixâ does not name a type
EAN.h:3:33: error: ISO C++ forbids declaration of âpâ with no type [-fpermissive]
a1test.cpp: In function âbool RegisteredTests(const Prefix*, int&, int*, int*)â:
a1test.cpp:222:68: error: no matching function for call to âisRegistered(const Prefix*&, const char [14], char [6], char [8], char [7])â
a1test.cpp:222:68: note: candidates are:
EAN.h:3:6: note: bool isRegistered(const int*, const char*, char*, char*, char*)
EAN.h:3:6: note:   no known conversion for argument 1 from âconst Prefix*â to âconst int*â
GS1Prefix.h:10:6: note: bool isRegistered(const Prefix*, int)
GS1Prefix.h:10:6: note:   candidate expects 2 arguments, 5 provided

Это всего лишь половина ошибок, ниже у меня есть все файлы.h и ссылка на a1test.cpp (его длинный код)

EAN.h

bool isValid(const char* str);
bool isRegistered(const Prefix* p, const char* str, char area[],char publisher[], char title[]);

GS1Prefix.h

const int MAX = 700;
struct Prefix {
    int  no;             // number of entries
    int  area[MAX];      // area elements
    char pubLow[MAX][8]; // low end of publisher range
    char pubHgh[MAX][8]; // high end of publisher range
    int  pubLen[MAX];    // no of chars in publisher string
};
bool load(const char* filename, Prefix* p);
bool isRegistered(const Prefix* p, int area);
int minNoDigits(const Prefix* p, int area);
bool isRegistered(const Prefix* p, int area, const char* publisher);

Ссылка на a1test.cpp → a1test.cpp

UPDATE: Как было предложено remyabel, я сделал #include "GS1Prefix.h" после #include "EAN.h"

In file included from EAN.cpp:6:0:
EAN.h:3:25: error: âPrefixâ does not name a type
EAN.h:3:33: error: ISO C++ forbids declaration of âpâ with no type [-fpermissive]
  • 1
    EAN.h должен GS1Prefix.h за GS1Prefix.h .
  • 0
    Что было последним, что вы изменили перед появлением ошибок? Я имею в виду, что вы не написали весь этот код до его тестирования, не так ли?
Показать ещё 4 комментария
Теги:
header-files

2 ответа

2

Просто переключите порядок заголовков, и ваш код должен скомпилироваться. Поскольку вы не предоставляли GS1Prefix.cpp и EAN.cpp я не могу прокомментировать остальную часть ошибок (если есть какие-либо левые.)

#include <cstring>

// GS1Prefix.h
const int MAX = 700;
struct Prefix {
    int  no;             // number of entries
    int  area[MAX];      // area elements
    char pubLow[MAX][8]; // low end of publisher range
    char pubHgh[MAX][8]; // high end of publisher range
    int  pubLen[MAX];    // no of chars in publisher string
};
// EAN.h
bool isValid(const char* str);
bool isRegistered(const Prefix* p, const char* str, char area[],char publisher[], char title[]);
// a1test.cpp
bool load(const char* filename, Prefix* p);
bool isRegistered(const Prefix* p, int area);
int minNoDigits(const Prefix* p, int area);
bool isRegistered(const Prefix* p, int area, const char* publisher);
// .. rest of your file
  • 0
    Спасибо! В моем EAN.cpp перед #include "EAN.h" у меня был #include "GS1Prefix.h", но у меня все еще есть первые 3 ошибки.
1

Файлы заголовков должны содержать достаточное определение, чтобы они были самодостаточными. В этом случае вам необходимо указать определение требуемого типа - Префикс. Просто добавьте include к вершине EAN.h:

#include <GS1Prefix.h>
bool isValid(const char* str);
bool isRegistered(const Prefix* p, const char* str, char area[],char publisher[],
                  char title[]);

Затем вы можете включить EAN.h в любой исходный файл, зная, что у вас нет зависимостей, о которых можно беспокоиться.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню