#c #compiler-errors
#c #ошибки компилятора
Вопрос:
Кто-нибудь может объяснить, почему Codeblocks выдает мне эти ошибки?:
error: ISO C forbids declaration of 'cout' with no type
error: invalid use of '::'
error: expected ';' before '<<' token
error: '<<x>>' cannot appear in a constant-expression // <<x>> is many different variable names
мой код буквально так же прост, как:
#include <iostream>
#include "myclass.h"
int main(){
std::string data;
std::string e;
e = myclass().run(data);
std::cout << e << std::endl;
return 0;
}
что в мире происходит?
РЕДАКТИРОВАТЬ: и да, у меня действительно есть iostream. извините, что не поместил это туда раньше
Комментарии:
1. Когда имеешь дело с ошибками компилятора, лучше решать их одну за другой с самого начала. Во многих случаях одна ошибка сбивает с толку анализатор, а некоторые более поздние диагностированные ошибки не таковы (я имею в виду
<<x>>
часть там, которая может относиться или не относиться к реальным ошибкам).2. @calccrypto — по поводу редактирования — тогда покажите нам, что
myclass().run(data)
делает3. myclass().run(данные) возвращает строку
4. @calccrypto — если вы удалите (прокомментируете)
e = myclass().run(data);
и вставите вe
жестко закодированную строку, ошибка все еще появляется?5. @calccrypto — Покажите нам, что
myclass.h
содержит. Я почти уверен, что проблема в этом (вы увидите, что если вы удалите это включение, код будет работать идеально)
Ответ №1:
Добавить
#include <iostream>
std::cout
находится внутри этого заголовка
РЕДАКТИРОВАТЬ: что касается вашей правки — это означает, что проблема наверняка внутри myclass.h
или есть какой-то код, который здесь не показан.
Ответ №2:
Как насчет #include <string>
?
Без этого (и следующего кода)
#include <iostream>
int main(){
std::string data;
std::string e;
std::cout << e << std::endl;
return 0;
}
мои отчеты на g :
tst.cpp: In function `int main()':
tst.cpp:4: undeclared variable `string' (first use here)
tst.cpp:4: parse error before `;'
tst.cpp:5: parse error before `;'
tst.cpp:7: `e' undeclared (first use this function)
tst.cpp:7: (Each undeclared identifier is reported only once
tst.cpp:7: for each function it appears in.)
Ответ №3:
вы должны включить <iostream>
Ответ №4:
Вы включили <iostream>
куда-нибудь?
ОТРЕДАКТИРУЙТЕ, узнав, что вы добавили <iostream>
Ну, вы можете проверить:
#include <string>
- Если ваше определение класса заканчивается точкой с запятой
Если все в порядке, я хочу проверить ваш myclass.h 🙁
Ответ №5:
Код, который вы публикуете (с РЕДАКТИРОВАНИЕМ), правильный. Должно быть, что-то забавное происходит в myclass.h
. (Возможно,
#define std
, чтобы компилятор видел ::cout
.)
Возможно, вы захотите взглянуть на параметр «Вывод препроцессора: компилятор» -E
в Unix, /E
для Visual Studios. Это будет объемно, но все, что вас интересует, это последние 10 или около того строк; что препроцессор сделал с вашим кодом.