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
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
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 все еще нужно писать.