Форум программистов, компьютерный форум CyberForum.ru

Компилятор выдает ошибку. Structure required on left side of . Or .* - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.76
borland_
2 / 2 / 1
Регистрация: 20.05.2014
Сообщений: 47
25.06.2014, 08:55     Компилятор выдает ошибку. Structure required on left side of . Or .* #1
Компилятор выдает ошибку в этой строке: while(!f.eof()){. Не получается её исправить.

[C++ Error] Unit1.cpp(18): E2294 Structure required on left side of . or .*

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <fstream.h>
#include <stdio.h>
#include <string.h>
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{int k=1;
string *s;
FILE *f;
f=fopen("gg.txt", "r");
while(!f.eof()){
 cout<<k<<".";
 fread(s,sizeof (string),1,f);
 cout<<s;
 }
fclose(f);
system("Pause");
        return 0;
}
[C++ Error] Unit1.cpp(18): E2294 Structure required on left side of . or .*

P.S. Программа еще сыровата.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2014, 08:55     Компилятор выдает ошибку. Structure required on left side of . Or .*
Посмотрите здесь:

C++ wxDEV-C++ компилятор выдает ошибку
Компилятор выдает ошибку C++
C++ Ошибка structure required on left side of . or .*
C++ компилятор выдает ошибку
Почему компилятор выдает ошибку? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
25.06.2014, 09:06     Компилятор выдает ошибку. Structure required on left side of . Or .* #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от borland_ Посмотреть сообщение
Программа еще сыровата.
Не то слово

C++
1
2
3
4
5
6
7
8
9
10
11
int main(int argc, char* argv[])
{
string s;
std::ifstream f("gg.txt");
while(f){
std::getline(f, s) 
 cout<<s;
 }
system("Pause");
        return 0;
}
borland_
2 / 2 / 1
Регистрация: 20.05.2014
Сообщений: 47
25.06.2014, 09:23  [ТС]     Компилятор выдает ошибку. Structure required on left side of . Or .* #3
Я не очень понял, что делает ваша программа
Байт
 Аватар для Байт
13989 / 8820 / 1231
Регистрация: 24.12.2010
Сообщений: 15,976
25.06.2014, 09:34     Компилятор выдает ошибку. Structure required on left side of . Or .* #4
Цитата Сообщение от borland_ Посмотреть сообщение
while(!f.eof())
C++
1
while(!f->eof())
Разберитесь в разнице между точкой и стрелочкой...

Добавлено через 8 минут
Цитата Сообщение от borland_ Посмотреть сообщение
fread(s,sizeof (string),1,f);
Это место очень странное. Читаете туда, не знаю куда. Память то для s не выделена!
Лучше как-нибудь в духе... Даже не знаю как это исправить Воспользуйтесь советом uglyPinokkio,
Цитата Сообщение от borland_ Посмотреть сообщение
Я не очень понял, что делает ваша программа
Да... понять, что делает ваша тоже не просто... И никаких пояснений на этот счет вы не даете...
borland_
2 / 2 / 1
Регистрация: 20.05.2014
Сообщений: 47
25.06.2014, 09:43  [ТС]     Компилятор выдает ошибку. Structure required on left side of . Or .* #5
Неважно, что делает программа. Важно то, что она не распознает функцию eof() и выдает ошибку
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,334
Завершенные тесты: 1
25.06.2014, 09:49     Компилятор выдает ошибку. Structure required on left side of . Or .* #6
Цитата Сообщение от borland_ Посмотреть сообщение
она не распознает функцию eof() и выдает ошибку
Где в ошибке вы увидели что-либо про eof?
borland_
2 / 2 / 1
Регистрация: 20.05.2014
Сообщений: 47
25.06.2014, 09:51  [ТС]     Компилятор выдает ошибку. Structure required on left side of . Or .* #7
Ошибка указывает именно на эту строку и функцию, и программа не видит эту функцию
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
25.06.2014, 09:52     Компилятор выдает ошибку. Structure required on left side of . Or .* #8
Цитата Сообщение от borland_ Посмотреть сообщение
Я не очень понял, что делает ваша программа
Она делает то, что как мне показалось, должна делать Ваша - читает строку из текстового файла и выводит в консоль. И использует для этого потоки стандартной библиотеки С++.
Проще было написать свой вариант, чем исправить исходный.
Потому что:

C++
1
string *s - объявлен указатель на строку, который ни на что не указывает.
C++
1
while(!f.eof())
- должно быть
C++
1
while ( ! feof (f) )
C++
1
fread(s,sizeof (string),1,f);
Так читают, когда размер данных заранее известен, стандартная строка содержит динамический символьный буфер на куче, писать-читать ее таким образом нельзя.
Байт
 Аватар для Байт
13989 / 8820 / 1231
Регистрация: 24.12.2010
Сообщений: 15,976
25.06.2014, 10:00     Компилятор выдает ошибку. Structure required on left side of . Or .* #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от borland_ Посмотреть сообщение
Ошибка указывает именно на эту строку и функцию, и программа не видит эту функцию
Повторим (мать ученья!)
Цитата Сообщение от Байт Посмотреть сообщение
Разберитесь в разнице между точкой и стрелочкой...
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,334
Завершенные тесты: 1
25.06.2014, 10:03     Компилятор выдает ошибку. Structure required on left side of . Or .* #10
Цитата Сообщение от borland_ Посмотреть сообщение
Ошибка указывает именно на эту строку и функцию,
Значит ошибка в while! Хотя нет, программа не видит скобочки. Точно.
Это следуя вашей логике.
Среда вам лишь подсвечивает строку, в которой произошла ошибка. А в этой строке может находиться много чего. В астности то, о чем вам твердит Байт. Прислушайтесь наконец к нему.
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
25.06.2014, 10:11     Компилятор выдает ошибку. Structure required on left side of . Or .* #11
Народ, вы издеваетесь?

C++
1
2
3
4
5
6
7
8
9
10
11
12
typedef struct
{
        unsigned char  *curp;       /* Current active pointer     */
        unsigned char  *buffer;     /* Data transfer buffer       */
        int             level;      /* fill/empty level of buffer */
        int             bsize;      /* Buffer size                */
        unsigned short  istemp;     /* Temporary file indicator   */
        unsigned short  flags;      /* File status flags          */
        wchar_t         hold;       /* Ungetc char if no buffer   */
        char            fd;         /* File descriptor            */
        unsigned char   token;      /* Used for validity checking */
}       FILE;                       /* This is the FILE object    */
Какие стрелочки?
borland_
2 / 2 / 1
Регистрация: 20.05.2014
Сообщений: 47
25.06.2014, 10:18  [ТС]     Компилятор выдает ошибку. Structure required on left side of . Or .* #12
Ладно, сам разберусь. Ни одного дельного ответа не получил. Все ваши варианты c eof не работают. На них обязательно выдает ошибку
Байт
 Аватар для Байт
13989 / 8820 / 1231
Регистрация: 24.12.2010
Сообщений: 15,976
25.06.2014, 10:21     Компилятор выдает ошибку. Structure required on left side of . Or .* #13
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Народ, вы издеваетесь?
Нет, это вы издеваетесь над народом
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Какие стрелочки?
C++
1
2
3
4
FILE ff;
ff.fd;
FILE *f;
f->fd;
Добавлено через 2 минуты
Цитата Сообщение от borland_ Посмотреть сообщение
Ладно, сам разберусь
Удачи!
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
25.06.2014, 10:25     Компилятор выдает ошибку. Structure required on left side of . Or .* #14
Цитата Сообщение от Байт Посмотреть сообщение
Нет, это вы издеваетесь над народом
А скобочки где?! )))) Круглые!

Цитата Сообщение от Байт Посмотреть сообщение
Удачи!
+1 - Она понадобится
borland_
2 / 2 / 1
Регистрация: 20.05.2014
Сообщений: 47
25.06.2014, 10:43  [ТС]     Компилятор выдает ошибку. Structure required on left side of . Or .* #15
uglyPinokkio спасибо. Воспользовался твоим первым ответом, решил не париться с eof (забуду эту функцию, проблем с ней не оберешься). Все получилось.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2014, 10:47     Компилятор выдает ошибку. Structure required on left side of . Or .*
Еще ссылки по теме:

C++ LoadKeyboardLayout - компилятор выдает ошибку
C++ Компилятор Visual C++ 2008 выдает ошибку
String::replace ошибка Structure required on left side of . or .* C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
25.06.2014, 10:47     Компилятор выдает ошибку. Structure required on left side of . Or .* #16
Цитата Сообщение от borland_ Посмотреть сообщение
забуду эту функцию, проблем с ней не оберешься
Да нет там проблем. fopen-fread-fclose это функции стандартной библиотеки С. fopen возвращает указатель на структуру FILE, у которой нет метода eof(), и вообще нет ни одного метода. Конец файла проверяется функцией feof.
Yandex
Объявления
25.06.2014, 10:47     Компилятор выдает ошибку. Structure required on left side of . Or .*
Ответ Создать тему
Опции темы

Текущее время: 12:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru