Безумные базовые ошибки c

#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 или около того строк; что препроцессор сделал с вашим кодом.