Синтаксическая ошибка идентификатор file

I’m following a walk-through that required the jpeglib from http://www.ijg.org/.
After installing the files in jpegsr9a.zip and adding the code that utilizes the files, I get the following errors after compiling:

1>  jpeg.cpp
1>c:\libraries\jpeg\jpegsr9a\jpeg\jpeglib.h(974): error C2061: syntax error : identifier 'FILE'
1>c:\libraries\jpeg\jpegsr9a\jpeg\jpeglib.h(975): error C2061: syntax error : identifier 'FILE'
1>c:\...\jpeg.h(5): error C2143: syntax error : missing ';' before '*'
1>c:\...\jpeg.h(5): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\...\jpeg.cpp(11): error C2065: 'pBitMap' : undeclared identifier
1>c:\...\jpeg.cpp(16): error C2065: 'pBitMap' : undeclared identifier
1>c:\...\jpeg.cpp(16): error C2227: left of '->sizeX' must point to class/struct/union/generic type
1>          type is 'unknown-type'

There are a lot more, but I think they’re all related to the C2061 errors. Does this look like I’ve made a mistake when adding the libraries?

The following are the header files in the program:

//heightfield.h

#include <Windows.h>

//jpeg.h

#include <Windows.h>
#include <jpeglib.h>
#pragma comment(lib, "jpeg.lib")

tImageJPG *SwiftLoadJpeg(const char *srFileName);

void SwiftTextureJpeg(unsigned int tTexture [], LPSTR strFileName, int ID);

Any thoughts would be greatly appreciated.

asked Dec 16, 2014 at 6:21

Anik's user avatar

AnikAnik

3111 gold badge5 silver badges12 bronze badges

6

When you see that it does not recognize an identifier, after checking for a typo in the identifier name,
look for a missing #include.

Since the unrecognized variable was FILE, which is part of the input/output interface in the standard library, the file needed is .

How would you figure this out if you didn’t know already? Look at documentation/help for FILE, or for functions which use FILE. They should specify which header file is needed.

Your second error, C2143, looks like it is also a missing #include. It is on line 5. Look at line 5. The first * comes after the identifier, tImageJPG. If the compiler does not recognize tImageJPG, it won’t be expecting some thing like «*» after it. Is this a typedef of yours? I don’t see it in a copy of jpeglib.h that I found online, and you are clearly including jpeglib.h. Perhaps there is a header file from your own project which you need to include here. Or perhaps it has not yet been defined, and the typedef still needs to be written.

answered Dec 16, 2014 at 7:13

Basya's user avatar

BasyaBasya

1,4771 gold badge12 silver badges22 bronze badges

4

Я следую за прогоном, который потребовал jpeglib от http://www.ijg.org/.
После установки файлов в jpegsr9a.zip и добавления кода, который использует файлы, я получаю следующие ошибки после компиляции:

1>  jpeg.cpp
1>c:\libraries\jpeg\jpegsr9a\jpeg\jpeglib.h(974): error C2061: syntax error : identifier 'FILE'
1>c:\libraries\jpeg\jpegsr9a\jpeg\jpeglib.h(975): error C2061: syntax error : identifier 'FILE'
1>c:\...\jpeg.h(5): error C2143: syntax error : missing ';' before '*'
1>c:\...\jpeg.h(5): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\...\jpeg.cpp(11): error C2065: 'pBitMap' : undeclared identifier
1>c:\...\jpeg.cpp(16): error C2065: 'pBitMap' : undeclared identifier
1>c:\...\jpeg.cpp(16): error C2227: left of '->sizeX' must point to class/struct/union/generic type
1>          type is 'unknown-type'

Их намного больше, но я думаю, что все они связаны с ошибками C2061. Похоже, я ошибся при добавлении библиотек?

Ниже приведены файлы заголовков в программе:

//heightfield.h

#include <Windows.h>

//jpeg.h

#include <Windows.h>
#include <jpeglib.h>
#pragma comment(lib, "jpeg.lib")

tImageJPG *SwiftLoadJpeg(const char *srFileName);

void SwiftTextureJpeg(unsigned int tTexture [], LPSTR strFileName, int ID);

Любые мысли будут с благодарностью.

0

Решение

Когда вы видите, что он не распознает идентификатор, после проверки на опечатку в имени идентификатора,
искать недостающий #include.

Поскольку нераспознанная переменная была FILE, которая является частью интерфейса ввода / вывода в стандартной библиотеке, необходим файл.

Как бы вы поняли это, если бы вы еще не знали? Посмотрите документацию / справку по FILE или по функциям, которые используют FILE. Они должны указать, какой заголовочный файл необходим.

Ваша вторая ошибка, C2143, выглядит так, как будто отсутствует #include. Это в строке 5. Посмотрите на строку 5. Первый * идет после идентификатора, tImageJPG. Если компилятор не распознает tImageJPG, он не будет ожидать чего-то вроде «*» после него. Это ваш typedef? Я не вижу его в копии jpeglib.h, которую я нашел в Интернете, и вы явно включаете jpeglib.h. Возможно, есть заголовочный файл из вашего собственного проекта, который вы должны включить сюда. Или, возможно, он еще не был определен, а typedef еще нужно написать.

1

Другие решения

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#include <iostream>
using namespace std;
 
class book
{
private:
 
    char *author;
    char *title;
    char *publishing;
    unsigned int year;
    int num_pages;
 
public:
    book():author(NULL),title(NULL),publishing(NULL),year(0),num_pages(0){}
    book(char *cur_author
        , char *cur_title
        , char *cur_publishing
        , unsigned int cur_year
        , int cur_num_pages);
 
    void set_author(char *cur_author);
    void set_title(char *cur_title);
    void set_publishing(char *cur_publishing);
    void set_year(unsigned int cur_year);
    void set_num_pages(int cur_num_pages);
    void board();
    
    char *get_author();
    char *get_title();
    char *get_publishing();
    unsigned int get_year();
    int get_num_pages();
 
    ~book();
};
class search
{
private:
    book *arr;
    int n;
public:
    search(int n);
    void book_spisok(int n, char author);
    void book_npublishing();
    void book_year(unsigned int year);
    ~search();
};
 
book :: ~book()
{
    delete[]author;
    delete[]title;
    delete[]publishing;
}
book::book(char *cur_author
    , char *cur_title
    , char *cur_publishing
    , unsigned int cur_year
    , int cur_num_pages)
    : num_pages(cur_num_pages),
    year(cur_year)
 
{
    author = new char[strlen(cur_author) + 1];
    strcpy(book::author, cur_author);
    title = new char[strlen(cur_title) + 1];
    strcpy(book::title, cur_title);
    publishing = new char[strlen(cur_publishing) + 1];
    strcpy(book::publishing, cur_publishing);
    this -> year = cur_year;
    this ->num_pages = cur_num_pages;
}
void book::set_author(char *au)
{
    delete[] author;
    author = new char[strlen(au) + 1];
    strcpy(book::author, au);
}
void book::set_title(char *tl)
{
    delete[] title;
    title = new char[strlen(tl) + 1];
    strcpy(book::title, tl);
}
void book::set_publishing(char *ph)
{
    delete[] publishing;
    publishing = new char[strlen(ph) + 1];
    strcpy(book::publishing, ph);
}
void book::set_year(unsigned int yr)
{
    this -> year = yr;
}
void book::set_num_pages(int num)
{
    this -> num_pages = num;
}
char *book :: get_author()
{
    return this -> author;
}
char *book :: get_title()
{
    return this-> title;
}
char *book :: get_publishing()
{
    return this-> publishing;
}
unsigned int book :: get_year()
{
    return this-> year;
}
int book :: get_num_pages()
{
    return this-> num_pages;
}
 
void book::board()
{
    printf("\n\n Author - %s; Title - %s; Publishing - %s;\n Year - %i. Number os pages - %i\n\n", author, title, publishing, year, num_pages);
}
 
search::search(int n)
{
    this -> n = n;
    char *authors[] = { "Koval", "Baden", "Kranchenko", "Finiak", "Abakumov", "Sorokin", "Savchenko", "Podgorniy" };
    char *publishings[] = { "Bogdan", "LAZ", "Mersedes", "Volvo", "TATA" };
    char *titles[] = { "Koval", "Baden", "Kranchenko", "Finiak", "Abakumov", "Sorokin", "Savchenko", "Podgorniy" };
    arr = new book [n];
 
    for (int i = 0; i<n; i++)
    {
        arr[i].set_author(authors[rand() % 8]);
        arr[i].set_publishing(publishings[rand() % 5]);
        arr[i].set_title(titles[rand() % 8]);
        arr[i].set_year(rand() % 27 + 1987);
        arr[i].set_num_pages(rand() % 10 + 100);
        arr[i].board();
        cout << endl;
    }
}
void search::book_year(unsigned int year)
{
    int k = 0;
    for (int i = 0; i < n; i++)
    {
        if (arr[i].get_year() > year)
        {
            cout << endl << "year >  " << arr[i].get_title() << endl;
            k++;
        }
    }
    if (!k)
        cout << endl << "" << endl;
}
 
search::~search()
{
    delete[]arr;
}
 
int main()
{
    setlocale(LC_ALL,"Rus");
    int n, year;
    cout << "Количество книг: ";
    cin >> n;
    if (n > 0)
    {
        search massive(n);
        cout << "Год: ";
        cin >> year;
        massive.book_year(n);
    }
    else
        cout << "Введено неверное число книг\n";
    system("pause");
    return 0;
 
}

Когда вы видите, что он не распознает идентификатор, после проверки на опечатку в имени идентификатора найдите отсутствующий #include.

Поскольку нераспознанная переменная была FILE, которая является частью интерфейса ввода / вывода в стандартной библиотеке, необходим файл.

Как бы вы поняли это, если бы вы еще не знали? Посмотрите документацию / справку по FILE или по функциям, которые используют FILE. Они должны указать, какой заголовочный файл необходим.

Ваша вторая ошибка, C2143, выглядит так, как будто отсутствует #include. Это в строке 5. Посмотрите на строку 5. Первый * идет после идентификатора, tImageJPG. Если компилятор не распознает tImageJPG, он не будет ожидать чего-то вроде «*» после него. Это ваш typedef? Я не вижу его в копии jpeglib.h, которую я нашел в Интернете, и вы явно включаете jpeglib.h. Возможно, есть заголовочный файл из вашего собственного проекта, который вы должны включить сюда. Или, возможно, он еще не определен, а typedef еще нужно написать.

Когда вы увидите, что он не распознает идентификатор, после проверки опечатки в имени идентификатора, найдите отсутствующий #include.

Поскольку непризнанной переменной был FILE, который является частью интерфейса ввода/вывода в стандартной библиотеке, необходим файл.

Как бы вы поняли это, если не знаете? Посмотрите документацию/справку для FILE или для функций, которые используют FILE. Они должны указать, какой файл заголовка нужен.

Ваша вторая ошибка, C2143, выглядит так же, как и отсутствующий #include. Он находится в строке 5. Посмотрите на строку 5. Первый * появляется после идентификатора, tImageJPG. Если компилятор не распознает tImageJPG, он не ожидает, что после него произойдет что-то вроде «*». Это ваш typedef? Я не вижу его в копии jpeglib.h, которую я нашел в Интернете, и вы явно включаете jpeglib.h. Возможно, есть заголовочный файл из вашего собственного проекта, который вам нужно включить сюда. Или, возможно, он еще не определен, и typedef все еще нужно писать.

Понравилась статья? Поделить с друзьями:
  • Синтаксическая ошибка неожиданный символ после символа продолжения строки
  • Синтаксическая ошибка и настройкагруппировкиобщейнастройки этодействующийпараметр
  • Синтаксическая ошибка неожиданный конец файла bash
  • Синтаксическая ошибка выбрать во вложенном запросе
  • Синтаксическая и пунктуационная ошибка