LINUX.ORG.RU

Ошибка компиляции в g++


0

1

Решил перейти на С++, поставил linux. Из программ пользуюсь текстовым редактором GNU Emacs и компилятором g++ из под терминала. Возникает ошибка при компиляции программ использующих <vector> и <fstream>. Код с <Vector>:

#include <iostream>
#include <string>
#include <vector>

int main()
{
  vector <int> a;
  int b;
  std::cout << "Введите количество чисел" < std::endl;
  std::cin >> b;
  a.push_back(1);
  a.push_back(1);
  if (b > 2)
    {
      for (c = 2; c < b; c++)
	{
	  a.push_back(a[c - 2] + a[c - 1]); 
	}
    }
  for (c = 0; c < a.size(); c++)
    {
      std::cout << a[c] << std::endl;
    }
}
При этом коде компилятор выдает ошибку:

Vector.cpp: In function ‘int main()’:
Vector.cpp:7:3: error: ‘vector’ was not declared in this scope
Vector.cpp:7:11: error: expected primary-expression before ‘int’
Vector.cpp:7:11: error: expected ‘;’ before ‘int’
Vector.cpp:9:72: error: no match for ‘operator<’ in ‘std::operator<< [with _Traits = std::char_traits<char>](((std::basic_ostream<char>&)(& std::cout)), ((const char*)«\37777777720\37777777622\37777777720\37777777662\37777777720\37777777665\37777777720\37777777664\37777777720\37777777670\37777777721\37777777602\37777777720\37777777665 \37777777720\37777777672\37777777720\37777777676\37777777720\37777777673\37777777720\37777777670\37777777721\37777777607\37777777720\37777777665\37777777721\37777777601\37777777721\37777777602\37777777720\37777777662\37777777720\37777777676 \37777777721\37777777607\37777777720\37777777670\37777777721\37777777601\37777777720\37777777665\37777777720\37777777673»)) < std::endl’
Vector.cpp:11:3: error: ‘a’ was not declared in this scope
Vector.cpp:15:12: error: ‘c’ was not declared in this scope
Vector.cpp:20:8: error: ‘c’ was not declared in this scope

Как я понимаю, он не считывает <vector>, или нужно указать какое-то пространство имен... Прошу помочь, и показать, где я ошибся. Для g++ установил все покеты. ОС Ubuntu 11.04
Для <fstream> похожее, но без строчки с набором цифр.



Последнее исправление: Ser-strannik (всего исправлений: 1)

> < std::endl;

<< std::endl;

arsi ★★★★★
()
Ответ на: комментарий от yoghurt

Исправил

Количество ошибок уменьшилось, но [br] Vector.cpp:9:72: error: no match for ‘operator<’ in ‘std::operator<< [with _Traits = std::char_traits<char>](((std::basic_ostream<char>&)(& std::cout)), ((const char*)«\37777777720\37777777622\37777777720\37777777662\37777777720\37777777665\37777777720\37777777664\37777777720\37777777670\37777777721\37777777602\37777777720\37777777665 \37777777720\37777777672\37777777720\37777777676\37777777720\37777777673\37777777720\37777777670\37777777721\37777777607\37777777720\37777777665\37777777721\37777777601\37777777721\37777777602\37777777720\37777777662\37777777720\37777777676 \37777777721\37777777607\37777777720\37777777670\37777777721\37777777601\37777777720\37777777665\37777777720\37777777673»)) < std::endl’ на месте, что делать, yoghurt тебе отдельное спасибо

Ser-strannik
() автор топика
Ответ на: комментарий от arsi

Мдя....

Такую опечатку не саметил, а про переменную с уже заметил... Ничего. просто непривычно, я рантше в VS2010 на C# писал, привык к подсказкам среды...

Ser-strannik
() автор топика
Ответ на: Мдя.... от Ser-strannik

>я рантше в VS2010 на C# писал, привык к подсказкам среды

Так поставь IDE, а не текстовый редактор.
Или допили Emacs до состояния IDE.

proud_anon ★★★★★
()

Решил перейти на С++, поставил linux.

поделил на 0 мой моск

Из программ пользуюсь текстовым редактором GNU Emacs

начни с чего-нибудь попроще, например c NetBeans или Eclispe

shty ★★★★★
()
Ответ на: комментарий от shty

Просто уже опыт в программировании уже имеется. Pascal -> VB -> VB.NET -> C#. Раньше пытался выучить С++, но не хватала опыта. Да и linux интересно было посмотреть... Начал учить вчера... Книгу «Освой самостоятельно С++ за 21 день» уже 6 дней проглотил, мне С++ очень напоминает C#. Да и GNU Emacs устраивает полностью.

Ser-strannik
() автор топика
Ответ на: комментарий от ott

)

Я знаю, что нельзя научится программировать за 21 день)) Просто этот материал станет базой, фундаментом, а там я пойду дальше. Эта книга - объяснение базового синтаксиса языка.

Ser-strannik
() автор топика
Ответ на: комментарий от Ser-strannik

-> VB -> VB.NET -> C#

omg, кто же так над человеком поиздевался?
Сразу после Pascal надо было C/C++ изучать.
Я с Pascal в школе тоже начинал, потом осваивал C Кернигана и Ритчи,
позже С++ по книге Страуструпа (и тогда ещё даже kdevelop не падал :/).

blinkenlichten
()
Ответ на: комментарий от blinkenlichten

Вот мне так не повезло, а поиздевались учителя. Всегда впереди стояла цель С++.

Ser-strannik
() автор топика
#include <iostream>
#include <string>
#include <vector>

int main()
{
	std::vector <int> a;
	int b;
	std::cout << "Введите количество чисел" << std::endl;
	std::cin >> b;
	a.push_back(1);
	a.push_back(1);
	if (b > 2) {
		for (int c = 2; c < b; c++) {
			a.push_back(a[c - 2] + a[c - 1]); 
		}
	}
	for (unsigned int c = 0; c < a.size(); c++) {
		std::cout << a[c] << std::endl;
	}
	return 0;
}
nanoo_linux
()
Ответ на: комментарий от Ser-strannik

Я сначала разобрал примеры, потом начал своё делать, но надо чтобы была конкретная задача для написания.
Было достаточно этой информации: http://doc.qt.nokia.com/4.7/
О формах *.ui в Qt4 — я их не использую, пишу вручную, может и медленнее,
но мне так добавлять свои сигналы/слоты легче.

blinkenlichten
()
Ответ на: комментарий от blinkenlichten

Начал учить указатели... что предпочительней использовать, переменную или указатель на область памяти через оператор new?

Ser-strannik
() автор топика
Ответ на: комментарий от Ser-strannik

Выучи сишечку для начала, а потом уж в кресты суйся, раз непонимание на таком уровне.

anonymous
()
Ответ на: комментарий от anonymous

Можно ответ на вопрос, статью или еще что-нибудь... Узучая С можно этот аспект выучить. Но, можно и в С++ его разобрать

Ser-strannik
() автор топика
Ответ на: комментарий от Ser-strannik

Объекты выделяемые в куче (оператором new) используются в друх случаях:

1. Надо создать объект, размер или точный тип которого не известен на эпате компиляции программы (мы не рассматриваем динамическое выделение памяти на стеке с исопльзованием alloca).

2. Требуется передать значение переменной за пределы блока в котором она объявлена, но копирование по значению слишком затратно. В этом случае память под объект выделяется на куче и передаётся указатель на объект.

Begemoth ★★★★★
()
Ответ на: комментарий от Ser-strannik

А что означает «предпочтительней»?
Для каждого типа данных своё применение.
Указатели могут быть инициализированы и без new, например,

#include <stdio.h>
#include <string.h>

int main()
{
  const unsigned int bufsize = 6;
  //создаём буффер (стат. массив)
  char buffer[bufsize];
  strncpy(buffer, "hello\0",bufsize);//копируем hello
  
  char *p1 = &buffer[1];//два одинаковых указателя
  char *p2 = buffer+1;  //просто по-разному написана инициализация
  
  printf("Адрес p1 и p2 :\t %x\t%x\n",p1,p2);
  printf("Разименование указателей p1,p2: \n");
  for(int i=0; i< 4; i++){
    printf("p1[%d]=*(p1+%d)=\t%c\t\t",i, i,*(p1+i) );
    printf("p2[%d]=*(p2+%d)=\t%c\n",i, i,*(p2+i) );
  }
  
  //Теперь создаём буффер иным способом(дин. массив)
  char *buffer2 = new char[bufsize];
  strncpy(buffer2,buffer, bufsize);//копируем туда hello
  //создаём указатель
  char *p3 = buffer2+1;
  
  printf("\nАдрес p3 :\t %x\n",p3);
  printf("Разименование указателя p3 :\n");
  for(int i=0; i< 4; i++)
    printf("p3[%d]=*(p3+%d)=\t%c\n",i, i, *(p3+i) );
  
  return 0;
}

blinkenlichten
()
Ответ на: комментарий от Ser-strannik

мне С++ очень напоминает C#

это означает что пока Вы не дошли до хоть сколько-нибудь серьёзного использования С++, для Вашего же спокойствия в будущем лучше забудьте о несколько похожем синтаксисе и притворитесь что изучаете С++ с нуля

shty ★★★★★
()
Ответ на: комментарий от Ser-strannik

>мне С++ очень напоминает C#
Советую посмотреть ассемблерный вывод своего кода, чтобы понимать что-куда, и что так сравнивать плюсы с шарпом не стоит.

GAMer ★★★★★
()
Ответ на: комментарий от Rubystar

Я про основной синтаксис, компиляция разная, одно в промежуточный код, другое в машинный) я про то, как пишутся циклы, условия объявление переменных.

Ser-strannik
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.