انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: mojtaba_xyz در 06 اردیبهشت 1395، 09:03 بظ
-
سلام به همه دوستان
راستش این ترم ساختمان داده دارم همراه با استادی که ویندوزه اش اکس پی اه و کامپایبرش برلند و توربو سی پلاس ](*,) ](*,) ](*,)
البته تا این جلسه همه چی خوب و من کدهای که می گفت را با اضافه کردن int main و return 0 تو ++g کامپایل می کردم
تا این جلسه که کد زیر را بهمون داد و من هرچه تلاش کردم نفهمیدم مشکل اش چیه، البته با بکمی تحقیق فهمیدم که لینوکس conio.h نداره :'( :'( با اینکه کمکی استایلش را خراب می کنه ولی اگه بیخیال اون بشیم. به همه توابع ای که اولش str و gets این ارور را می ده
invalid conversion from 'unsigned char*' to 'char*' [-fpermissive]|
می دونم کد طولانی اه ولی نمی دونم چرا یک حسی بهم میگه مثل و int main با یک سری تغیرات جزئی همه چی درست می شه
ویرایش:
در کنار اون ارور این ارور هم می ده
initializing argument 1 of 'char* strcpy(char*, const char*)
سویچ -fpermissive هم امتحان کردم جواب نداد
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <process.h>
#include <stdlib.h>
#define NULL 0
#define FALSE 0
#define TRUE 1
typedef struct n{
unsigned char value[20];
n *rptr;
} node;
int main(void)
{
node *create_primary_list(void);
node *addfirst(node *lst,unsigned char *);
unsigned char input[20];
node *list=NULL,*t=NULL;
unsigned char chk_exit=FALSE;
clrscr();
if((list=create_primary_list())==NULL)
{
printf("Error creating primary linked list\a\n\0");
exit(1);
}
do
{
strcpy(input,"\0");
printf("Enter Text TO Add To First Of List : \0");
gets(input);
if(strcmpi(input,"Quit\0")!=0)
{
if((list=addfirst(list,input))==NULL)
{
printf("Error Ading To Primary Linked List\a\n\0");
exit(1);
}
}
else
chk_exit=TRUE;
}while(!chk_exit);
t=list;
clrscr();
while(t!=NULL)
{
printf("%s\n\0",t->value);
t=t->rptr;
}
return 0;
}
node *create_primary_list(void)
{
unsigned char str_ar[10][20]={"Windows\0",
"Windows 95\0",
"Turobo Pascal 6\0",
"Borland C++\0",
"Visual C++\0",
"MicoSoft Word\0",
"Visual Basic\0",
"Delphi\0",
"Borland Pascal\0",
"Borland Delphi\0"
};
node *lst=NULL,*cur=NULL,*t=NULL;
unsigned char i;
for(i=0;i<10;i++)
if(lst==NULL)
{
if((cur= new node)==NULL)
return(NULL);
lst=cur;
cur->rptr=NULL;
strcpy(cur->value,str_ar[i]);
}
else
{
if((t=new node)==NULL)
return(NULL);
t->rptr=NULL;
cur->rptr=t;
cur=t;
strcpy(cur->value,str_ar[i]);
}
return(lst);
}
node *addfirst(node *lst,unsigned char *s)
{
node *t=NULL;
if(lst==NULL)
{
if((lst=new node)==NULL)
return(NULL);
lst->rptr=NULL;
strcpy(lst->value,s);
}
else
{
if((t=new node)==NULL)
return(NULL);
t->rptr=lst;
strcpy(t->value,s);
lst=t;
}
return(lst);
}
-
توی
typedef struct n{
unsigned char value[20];
n *rptr;
} node;
داری یه ساختار میسازی و توش از خودش استفاده میکنی؟
-
آره دیگه یک لیست پیونده ای، اون قراره به گره بعدی اشاره کنه
به اون خط ارور نمی ده به اون خطهای که از توابع رشته ای استفاده می کنم ارور می ده مثل gets و strcpy
-
اوه. داری فهرست پیوندی میسازی! تازه فهمیدم. خب وقتی سی++ است، چرا از کلاس و مزایای شیگرایی استفاده نمیکنی؟ این روشی که استفاده کردی خیلی عجیبه.
#include<iostream>
#include<cstdio>
using namespace std;
class node{
node* next;
char data;
public:
node(char x){
data=x;
next=NULL;
}
node(){
data='~';
next=NULL;
}
void set_next_node(node *n){
this->next=n;
}
node* get_next_node(){
return next;
}
char get_data(){
return data;
}
void set_data(char x){
data=x;
}
};
class Linked_List{
node *Head;
public:
Linked_List(char v){
Head= new node(v);
}
Linked_List(){
Head= new node();
}
void append(char v){
node *Cur;
for(Cur=Head;Cur->get_next_node()!=NULL;Cur=Cur->get_next_node()){
;
}
Cur->set_next_node(new node(v));
cout<<"appending"<<v<<"to"<<Head->get_data()<<endl;
}
node* get_Head(){
return Head;
}
void clear(){
Head=NULL;
}
void show(){
node *Cur;
for(Cur=Head;Cur!=NULL;Cur=Cur->get_next_node()){
cout<<Cur->get_data()<<" ";
}
}
};
-
اوه. داری فهرست پیوندی میسازی! تازه فهمیدم. خب وقتی سی++ است، چرا از کلاس و مزایای شیگرایی استفاده نمیکنی؟ این روشی که استفاده کردی خیلی عجیبه.
#include<iostream>
#include<cstdio>
using namespace std;
class node{
node* next;
char data;
public:
node(char x){
data=x;
next=NULL;
}
node(){
data='~';
next=NULL;
}
void set_next_node(node *n){
this->next=n;
}
node* get_next_node(){
return next;
}
char get_data(){
return data;
}
void set_data(char x){
data=x;
}
};
class Linked_List{
node *Head;
public:
Linked_List(char v){
Head= new node(v);
}
Linked_List(){
Head= new node();
}
void append(char v){
node *Cur;
for(Cur=Head;Cur->get_next_node()!=NULL;Cur=Cur->get_next_node()){
;
}
Cur->set_next_node(new node(v));
cout<<"appending"<<v<<"to"<<Head->get_data()<<endl;
}
node* get_Head(){
return Head;
}
void clear(){
Head=NULL;
}
void show(){
node *Cur;
for(Cur=Head;Cur!=NULL;Cur=Cur->get_next_node()){
cout<<Cur->get_data()<<" ";
}
}
};
من استفاده نمی کنم استادمون استفاده می کنه :'(
ولی ایول چه آسون و جالب \\:D/
راستی منبع خوبی برای ساختمان داده می شناسین؟؟ ترجییحا انگلیسی و کامل باشه؟؟ :o