ducdohuunguyen Ответов: 1

Блок кода ошибки компиляции с++11


Итак, у меня есть эта программа, которая корректно работает с компилятором g++ в CodeBlocks. Однако я хочу изменить эту программу и хочу использовать функцию to_string в C++11. Поэтому я перехожу к настройке - & gt;compiler - & gt;have g++ follow c++11 ISO C++ language standard and compile and run the program. Программа, которая работала, больше не работает. Вместо этого появился файл stat. h, И я получил целый список ошибок "не называет тип".:
_dev_t не называет тип
_ino_t не называет тип
_mode_t не называет тип
...
У меня даже нет _dev_t или _ino_t или любого из этих имен в моей программе. Я удаляю to_string, который только что добавил и скомпилировал, и все равно появляются те же ошибки. Что это за ошибка? Мои коды ниже.

Что я уже пробовал:

Заголовочный файл: контейнер.ч

#ifndef CONTAINER_H
#define CONTAINER_H
#include<string>
#include<vector>
using namespace std;
class ShippingContainer
{
public:
	ShippingContainer();
	ShippingContainer(int id);
	int getId();
	void setId(int id);
	virtual string getManifest();
	virtual void setManifest();
	virtual void add();
protected:
	int IdNumber;
};
class ManualShippingContainer: public ShippingContainer
{
public:
	ManualShippingContainer();
	ManualShippingContainer(int id);
	virtual void setManifest();
	virtual string getManifest();
private:
	string manifest;
};
class RFIDShippingContainer: public ShippingContainer
{
public:
	RFIDShippingContainer();
	RFIDShippingContainer(int id);
	virtual void add();
	virtual string getManifest();
private:
	vector<string>items;
	vector<int>quantity;
};
#endif //CONTAINTER_H


Реализация класса файлов: Container.cpp

#include "Container.h"
#include<iostream>
#include<string>
using namespace std;

ShippingContainer::ShippingContainer():IdNumber(0)
{
}
ShippingContainer::ShippingContainer(int id):IdNumber(id)
{
}
int ShippingContainer::getId()
{
	return IdNumber;
}
void ShippingContainer::setId(int id)
{
	IdNumber=id;
}
string ShippingContainer::getManifest()
{
	return "";
}
void ShippingContainer::add()
{
	cout<<"do nothing\n";
}
void ShippingContainer::setManifest()
{
	cout<<"do nothing\n";
}
ManualShippingContainer::ManualShippingContainer():ShippingContainer(),manifest("")
{
}
ManualShippingContainer::ManualShippingContainer(int id):ShippingContainer(id),manifest("")
{
}
void ManualShippingContainer::setManifest()
{
	string str;
	cout<<"List what is currently inside the container\n";
	getline(cin,str);
	manifest=str;
}
string ManualShippingContainer::getManifest()
{
	return manifest;
}
RFIDShippingContainer::RFIDShippingContainer():ShippingContainer()
{
}
RFIDShippingContainer::RFIDShippingContainer(int id):ShippingContainer(id)
{
}
void RFIDShippingContainer::add()
{
	string new_item;
	getline(cin,new_item);
	if (items.size()==0)
	{
		items.push_back(new_item);
		quantity.push_back(1);
	}
	else
	{
		bool found=false;
		for (unsigned int i=0;i<items.size();i++)
		{
			if (items[i]==new_item)
			{
				found=true;
				quantity[i]++;
				return;
			}
		}
		if (!found)
		{
			items.push_back(new_item);
			quantity.push_back(1);
		}
	}
}
string RFIDShippingContainer::getManifest()
{
	string str="";
	for (unsigned int i=0;i<items.size();i++)
	{
		char x
		str=str+"10"+" "+items[i]+'\n';
	}
	return str;
}


Основная программа: main.cpp

#include "Container.h"
#include<iostream>
#include<string>
#include<cctype>
using namespace std;
typedef ShippingContainer* ShippingContainerPtr;
int main()
{
	ShippingContainerPtr contain[4];

	for (int i=0;i<2;i++)
	{
		contain[i]=static_cast<ManualShippingContainer*>(contain[i]);
		contain[i]=new ManualShippingContainer(i+1);
		contain[i]->setManifest();
	}
	for (int i=2;i<4;i++)
	{
		contain[i]=new RFIDShippingContainer(i+1);
		char ans;
		do
		{
			contain[i]->add();
			cout<<"anything else?\n";
			cin>>ans;
			cin.ignore(1000,'\n');
		} while (toupper(ans)!='N');
	}
	for (int i=0;i<4;i++)
	{
		cout<<contain[i]->getId()<<" "<<contain[i]->getManifest();
	}
}


1 Ответов

Рейтинг:
12

Jochen Arndt

Согласно этому сообщению (c++ - G++ обновлено на MingW получает массивные сообщения об ошибках-переполнение стека[^]) (и другие), возможно, потребуется передать опцию

-std=gnu++11

вместо
-std=c++11

что, вероятно, задается кодовыми блоками.

Вы можете попробовать установить этот параметр в качестве дополнительного параметра вместо выбора параметра c++11.

Если это не поможет, проверьте параметры, переданные в g++ в командной строке (compile output). Могут быть и другие варианты, которые сбрасывают опцию C++11.

Для тестирования вы можете скопировать командную строку для компиляции одного файла, изменить некоторые параметры и выполнить его внутри оболочки.


ducdohuunguyen

Спасибо вам за помощь. Теперь я могу скомпилировать стандарт c++11 с помощью командной строки. Однако метод настройки блоков кода для быстрой компиляции, показанный в ссылке, которую вы мне показываете, не сработал для меня.