PDA

View Full Version : سوال: مشکل در لایه بندی در c++ ( البته با string ها)



fire_off
شنبه 15 فروردین 1388, 10:26 صبح
سلام
می خواهم از ورودی رشته بگیرم و در کلاسم متغیر خاصی را با آن رشته مقدار دهی کنم و همچنین متدی داشته باشم که بتوانم آن رشته را برگشت دهم ولی خطا میدهد و می گوید که نمی توانید char* را در char بریزید در حالی که هر دو از نوع char[20] هستند


این هم خود کد


a.h


#include <cstdlib>
#include <iostream>

using namespace std;
class a
{
public :
char Getx();
void Setx(char b[20]);
private:
char name[20];
};



a.cpp


#include <cstdlib>
#include <iostream>
#include "a.h"
using namespace std;

char a::Getx()
{
return name;
}

void a::Setx(char b[20])
{
name = b;
}



از همین جا خطا می گیرد و هنوز فرصت به گرفتن رشته از ورودی را پیدا نکردم

Nima_NF
شنبه 15 فروردین 1388, 13:13 عصر
در زبان ++C/C شما نمی توانید دو آرایه را با علامت مساوی در همدیگر کپی کنید، باید تک تک خانه ها را در یک حلقه for به اندازه 20 در دیگری کپی کنید.



int i;
for (i=0 ; i<20 ; i++ )
name[i] = b[i];


همین طور نمی توانید یک آرایه را به آن شکل return کنید، برای این موارد باید از اشاره گرها استفاده کنید. اگر قرار هست آرایه ای را برگردانید بهتر هست از طریق همان پارامترها برگردانده شود در غیر این صورت حتما از اشاره گر ها استفاده کنید.

fire_off
شنبه 15 فروردین 1388, 13:29 عصر
با تشکر از جوابتون

مشکل قبلی حل شد و این بار مشکل دیگر

چگونه در c++ بفهمیم که یک کلاس هنوز از روش ساخته نشده

مثلاً در c# همانند کد روبروست

if(ClaassB != Null)
{}


ولی در c++ کلاسی که از روش ساخته نشده و فقط یک refrence به آن تعریف شده را null نمی داند باید چه کنیم؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟

sianooshonline
شنبه 15 فروردین 1388, 17:29 عصر
سلام ، در مورد سوال اول یک نکته رو میخوام بگم و اینکه سعی کنید تا حد امکان اشاره گر به یک رشته رو بر نگردونید و مثلا تابع رو اینجوری بنویسید بهتره :
(
void getStr(char* result

برای سوال دوم چند تا راه هست اما من خودم توی ctor اون کلاس چیزی رو مقدار دهی میکنم و بعدا میفهمم که تون کلاس init شده یا نه.
اصولا وقتی یک آبجکت به صورت Refrence تعریف میکنی و همونجا مقدار دهیش میکنی ctor اون کلاس call میشه بنابراین نباید هم NULL باشه.
اگه توضیح نیاز بود پیغام بزار.