PDA

View Full Version : سوال: خطا هنگام اجرا



Desaghi
سه شنبه 20 خرداد 1393, 09:50 صبح
این کد بدون مشکل کامپایل میشه ولی فایل exe هنگام اجرا خطا میده!! علت چیه؟
برای کامپایل برنامه هایی که از استاندارد جدید استفاده می کنند چه نکاتی لازم است در نظر گرفته شود؟
کامپایلر ++g
winxp



g++ main.cpp -std=C++‎‎‎‎‎11

#include <iostream>#include <vector>
#include <memory>
using namespace std;
int main()
{
shared_ptr<vector<int>> a;


{
shared_ptr<vector<int>> b(new vector<int>());
(*b).push_back(10);
a=b;
}//in ja b pak mishe vali az oonjaiee le a ham be mohtaviat dakhele b eshare mikone etelaat dakhele b pak nemishan
cout<<(*a)[0];
//in ja vector ee ke new shode pak mishe
return 0;
}

trminator
جمعه 10 مرداد 1393, 16:51 عصر
من هم با دقیقا همین مشکل رو با g++ نسخه 4.8.2 دارم. من از monodevelop و Qt creator استفاده کردم هر دو یک خطا دادند.
کد:
#include<iostream>
#include"person.h"
#include<string>
#include"Resource.h"
//#include"twitter.h"

usingnamespace std;

int main(){
person kate("kate","gregory", 123);
kate.addresource();
kate.setfirstname("kate2");
kate.addresource();
person kate2 = kate;

return 0;
}



person.h

#include<string>
#include"Resource.h"
#include<memory>
#ifndef _person_H
#define _person_H
usingnamespace std;
class person{
public:
person(string first, string last, int arbitrary);
string getname();
int getnumber();
void setnumber(int);
booloperator < (person& p);
booloperator < (int i);
friendbooloperator < (int i, person& p);
void addresource();
void setfirstname(string s);
private:
string firstname;
string lastname;
int arbitrarynumber;
shared_ptr <resource> presource;
};
booloperator < (int i, person& p);
#endif

person.cpp

#include<iostream>
#include"person.h"
usingnamespace std;
person::person(string first,string last,int arbitrary) :
firstname(first), lastname(last), arbitrarynumber(arbitrary){
cout << "constructing" << firstname << "" << lastname << endl;
}
string person::getname(){
return firstname + "" + lastname;
}
void person::setnumber(int num){
arbitrarynumber = num;
}
int person::getnumber(){
return arbitrarynumber;
}
bool person::operator < (person& p){
return arbitrarynumber < p.arbitrarynumber;
}
bool person::operator < (int i){
return arbitrarynumber < i;
}
booloperator < (int i, person& p){
return i < p.arbitrarynumber;
}
void person::addresource(){
presource.reset();
presource = make_shared<resource>("resourcefor" + getname());
}
void person::setfirstname(string s){
firstname = s;
}

Resource.h

#pragma once
#include<string>
usingnamespace std;
class resource{
public:
resource(string n);
~resource();
string getname() const {return name;}
private:
string name;
};

Resource.cpp

#include"Resource.h"
#include<iostream>
usingnamespace std;

resource::resource(string n): name(n){
}
resource::~resource(){
}

توی تعریف کلاس person در بخش private به

shared_ptr <resource> presource; خطای

‘shared_ptr’ does not name a type
shared_ptr <resource> presource
می‌دهد.

sa1378
یک شنبه 12 مرداد 1393, 14:50 عصر
چرا اینقدر کد های g++ سخته؟
dev c++ رو که اینقدر مسخرش میکنن خیلی خوبه والا

amirtork
یک شنبه 12 مرداد 1393, 17:52 عصر
چرا اینقدر کد های g++ سخته؟
dev C++‎‎‎ رو که اینقدر مسخرش میکنن خیلی خوبه والا

g++ یکی از قوی ترین کامپایلر های زبان سی پلاس پلاس هست! کامپایل کد ها هم ربطی به کامپایلر نداره! کد باید طبق استاندارد های سی پلاس پلاس نوشته بشه!
من خودم به شخصه از Dev C++‎‎ خوشم نمیاد! بجاش ترجیح میدم از code::Blocks و Qt Creator به عنوان IDE و از g++ به عنوان کامپایلر استفاده کنم.(هرچند خود Qt Creator هم امکان کامپایل رو در اختیار میزاره و کار آمد هم هست، بعضی موقع ها از اون هم استفاده میکنم!)
در مورد این که تو مسابقات ACM، فقط Dev c++ در اختیارتون قرار میدن هم جای تعجب داره! توی مسابقات شریف، هم ویژوال استدیو، هم eclips(بیشتر برای جاوا) و هم Dev c++ رو در اختیار شرکت کننده ها قرار میدادن!

trminator
دوشنبه 13 مرداد 1393, 23:36 عصر
من هم با دقیقا همین مشکل رو با g++ نسخه 4.8.2 دارم. من از monodevelop و Qt creator استفاده کردم هر دو یک خطا دادند.
کد:

#include<iostream>
#include"person.h"
#include<string>
#include"Resource.h"
//#include"twitter.h"

usingnamespace std;

int main(){
person kate("kate","gregory", 123);
kate.addresource();
kate.setfirstname("kate2");
kate.addresource();
person kate2 = kate;

return 0;
}



person.h

#include<string>
#include"Resource.h"
#include<memory>
#ifndef _person_H
#define _person_H
usingnamespace std;
class person{
public:
person(string first, string last, int arbitrary);
string getname();
int getnumber();
void setnumber(int);
booloperator < (person& p);
booloperator < (int i);
friendbooloperator < (int i, person& p);
void addresource();
void setfirstname(string s);
private:
string firstname;
string lastname;
int arbitrarynumber;
shared_ptr <resource> presource;
};
booloperator < (int i, person& p);
#endif

person.cpp

#include<iostream>
#include"person.h"
usingnamespace std;
person::person(string first,string last,int arbitrary) :
firstname(first), lastname(last), arbitrarynumber(arbitrary){
cout << "constructing" << firstname << "" << lastname << endl;
}
string person::getname(){
return firstname + "" + lastname;
}
void person::setnumber(int num){
arbitrarynumber = num;
}
int person::getnumber(){
return arbitrarynumber;
}
bool person::operator < (person& p){
return arbitrarynumber < p.arbitrarynumber;
}
bool person::operator < (int i){
return arbitrarynumber < i;
}
booloperator < (int i, person& p){
return i < p.arbitrarynumber;
}
void person::addresource(){
presource.reset();
presource = make_shared<resource>("resourcefor" + getname());
}
void person::setfirstname(string s){
firstname = s;
}

Resource.h

#pragma once
#include<string>
usingnamespace std;
class resource{
public:
resource(string n);
~resource();
string getname() const {return name;}
private:
string name;
};

Resource.cpp

#include"Resource.h"
#include<iostream>
usingnamespace std;

resource::resource(string n): name(n){
}
resource::~resource(){
}

توی تعریف کلاس person در بخش private به

shared_ptr <resource> presource; خطای

‘shared_ptr’ does not name a type
shared_ptr <resource> presource
می‌دهد.

با افزودن یک خط به فایل xxxx.pro در Qt creator امکان کار با اشاره‌گرهای هوشمند فراهم می‌شود. فایل pro برای هر project بصورت جداگانه ساخته می‌شود.
QMAKE_CXXFLAGS += -std=c++0x