انجمن کاربران لینوکس ایران - تکنوتاکس سابق
مشکل در c++ - نسخه قابل چاپ

+- انجمن کاربران لینوکس ایران - تکنوتاکس سابق (https://forum.sito.ir)
+-- انجمن: پرسش‌ها و پاسخ‌ها (https://forum.sito.ir/forumdisplay.php?fid=3)
+--- انجمن: لینوکس و برنامه نویسی (https://forum.sito.ir/forumdisplay.php?fid=13)
+--- موضوع: مشکل در c++ (/showthread.php?tid=14700)

صحفه ها: 1 2


مشکل در c++ - مهمان - 2009-05-04

میشه بگید این خط برنامه چه کار می کنه؟

int * *m=new[int*]-1

این [int*[ معنیش چیه؟


- NLU - 2009-05-05

سلام

اول بگو ببینم جواب این سؤال چند نمره به پایان ترمت اضافه می کنه !؟ از شوخی گذشته احتمالا داستانش اینه :

چیزی که شما نوشتی اگه تست کنی می بینی اصلا کامپایل نمی شه چون در [ ] نمی شه یک نوع قرار داد بلکه باید یک عبارت قرار بگیره پس احتمالا این منظور شما بوده :

int **m = new(int*) -1;

که در اینصورت با توجه به (int*) در m آدرس یک اشاره گر به اشاره گر قرار داده می شه که با توجه به کم شدن عدد یک از اون اگه int در او سیستم 4 بایت باشه 4 بایت از آدرسی که توسط new برگردونده می شه کمتره و معلوم نیست به کجا اشاره می کنه. int* متغیر اشاره گر از نوع int هست و new عملگر اختصاص حافظه به یک نوع که آدرس حافظه اختصاص داده شده رو برمی گردونه.

در مجموع برای فهمیدن اشاره گرها زمان زیادی لازمه و پشتکار، کامپایل و دیباگ لازم داره تا کامل درک بشه.
موفق باشی.


- farhadnia - 2009-05-05

برای تعریف و مقدار دهی به یک آرایه دو بعدی بصورت پویا از کد زیر استفاده کن:

کد :
int **x;
x=new int * [intSize];
for(i=0;i<intSize;i++)
    x[i]=new int[intSize];

در کد بالا intSize طول آرایه ای است که نیاز دارید... یعنی در حالات کلی کد بالا به آرایه ای بطول intSize * intSize اشاره می کنه.


- مهمان - 2009-05-19

گفتم تاپیک اضافه نکنم و سوال مختصرم رو توی تاپیک یه بنده خدای دیگه بپرسم!
چرا نمیشه در سی++ یک کلاس به اینصورت تعریف کرد:
کد :
class A {
int i=1;
};
یعنی درواقع متغییرها رو موقع اعلان در کلاس، مقداردهی اولیه هم بکنیم.


- PC2st - 2009-05-19

در استاندارد جدید ++C این قابلیت (برای راحتی کار) اضافه خواهد شد و البته بسیاری موارد سودمند دیگر!


- farhadnia - 2009-05-19

میشه البته باید متغیر رو با صفت static تعریف کرد


- NLU - 2009-05-19

اینطوری میشه متغیرها را در متد سازنده پیش فرض مقدار دهی اولیه کرد:
کد :
class A {
int i;
public:
A() : i(1) {}
};



- farhadnia - 2009-05-20

نقل قول :در استاندارد جدید ++C این قابلیت (برای راحتی کار) اضافه خواهد شد و البته بسیاری موارد سودمند دیگر!
منبع این ادعا چیه؟
این کار کلا با فلسفه شی گرایی در تزاده چطور میشه شئی که باید یک ماهییت انتظایی داشته باشه رو بیان و امکان تعریف متغییر بصورت صریح در اون قرار بدن؟؟؟ حافظه نگهداری این متغییر از کجا تامین میشه؟؟؟
برای این دسته از تعاریف سی ++ یک قابلیت داره به اسم static شما می تونید یک متغییر یا یک کلاس رو با صفت static تعریف کنید و به اون بصورت بلافصل مقدار بدید...
و نیازی به دستکاری ورژن سی پلاس هم نیست. البته من بازم از این جمله دوستمون تعجب می کنم منظورتون از نسحه جدید C++ چیه؟ C++ builder یا C++ .Net یا C# یا هر ورژن دیگه؟؟؟


- مهمان - 2009-05-20

فكر ميكنم منظورشون استاندارد جديد سي++ هست. فكر ميكنم اسمش C++0x يا يه همچين چيزي بود.
ضمنا من نميخوام متغير مربوطه خواص متغيرهاي استاتيك رو داشته باشه.


- مهمان - 2009-05-20

من فقط يه مقدار پيشفرض براي متغيرهاي عادي ميخواستم كه نيازي به شلوغ كردن كد و ctor نداشته باشه. اونطوري وقتي نگاه ميكني متغيير و مقدار پيشفرضش يكجا هست و ساده و خواناست.


- PC2st - 2009-05-20

farhadnia نویسنده :منبع این ادعا چیه؟
کدوم ادعا؟! Smile استاندارد قبلی زبان ++C که C++98 بوده و استاندارد جدید قراره منتشر بشه اما چون فعلا مشخص نیست دقیقا تا چه سالی انتشار نهاییش طول میکشه، به همین خاطر استاندارد جدید زبان رو بصورت C++0x می‌نویسند که 0x عدد مربوط به سال رو مشخص می‌کنه. ولی به احتمال زیاد تا پایان سال ۲۰۰۹ کارش تموم میشه و نام استاندارد جدید ++C رو بصورت C++09 خواهند نوشت. در حال حاضر بسیاری از قابلیت‌های این استاندارد جدید در حال پیاده‌سازی شدن در کامپایلرهای معروف هست بخصوص GCC

farhadnia نویسنده :این کار کلا با فلسفه شی گرایی در تزاده چطور میشه شئی که باید یک ماهییت انتظایی داشته باشه رو بیان و امکان تعریف متغییر بصورت صریح در اون قرار بدن؟؟؟ حافظه نگهداری این متغییر از کجا تامین میشه؟؟؟
۱) تزاده = تضاده، انتظایی = انتزاعی، متغییر = متغیر
۲) قرار نیست با مشخص شدن مقدار پیش‌گزیده برای یک متغیر در بدنه کلاس، در همون لحظه براش حافظه تخصیص داده بشه! فکر کنم شما دقیقا نحوه initialize شدن نمونه‌ی اشیاء در ++C رو متوجه نشدید. وقتی که اعضای یک کلاس رو تعریف کنیم، در اون لحظه که تخصیص حافظه صورت نمیگیره. در ضمن، در خارج از بدنه تعریف کلاس، اگر هم مقدار پیش‌گزیده‌ای برای یک متغیر در نظر نگیریم، با تعریف متغیر (فقط نام و نوع آن)، تخصیص حافظه هم صورت میگیره و نیازی به علامت تساوی بعد از نام متغیر نیست.
۳) ممنون میشم ثابت کنی که چطور این قابلیت با شی‌گرایی در تضاده!؟ و اصولا میشه ربطش رو با شی‌گرایی توضیح بدی؟!

نقل قول :برای این دسته از تعاریف سی ++ یک قابلیت داره به اسم static شما می تونید یک متغییر یا یک کلاس رو با صفت static تعریف کنید و به اون بصورت بلافصل مقدار بدید...
البته کاربرد static با اون چیزی که تو این تاپیک درخواست شده، بسیار متفاوته.

نقل قول :و نیازی به دستکاری ورژن سی پلاس هم نیست. البته من بازم از این جمله دوستمون تعجب می کنم منظورتون از نسحه جدید C++ چیه؟ C++ builder یا C++ .Net یا C# یا هر ورژن دیگه؟؟؟
من گفته بودم استاندارد جدید ++C... ترجیحا بهتره کمی در این رابطه مطالعه کنید. گوگل دوست شماست Smile


- PC2st - 2009-05-20

<!-- m --><a class="postlink" href="http://en.wikipedia.org/wiki/C%2B%2B0x">http://en.wikipedia.org/wiki/C%2B%2B0x</a><!-- m -->

<!-- m --><a class="postlink" href="http://gcc.gnu.org/gcc-4.4/cxx0x_status.html">http://gcc.gnu.org/gcc-4.4/cxx0x_status.html</a><!-- m -->


- farhadnia - 2009-05-20

نقل قول :من گفته بودم استاندارد جدید ++C... ترجیحا بهتره کمی در این رابطه مطالعه کنید. گوگل دوست شماست
دوست من ببخشید که با معلومات کم زود قضاوت کردم در مورد پست شما من خودم رو سی کار می دونستم ولی باید یه مقدار از کار کمتر کنم و بیشترمطالعه کنم... :oops:
بازم ببخشید.


- PC2st - 2009-05-20

PC2st.ir نویسنده :استاندارد قبلی زبان ++C که C++98 بوده
من هم عذر میخوام :roll: چون این قسمت رو اشتباه نوشتم، استاندارد قبلی C++03 بوده (سال ۲۰۰۳) که بعد از استاندارد C++98 اومده بود.


- مهمان - 2009-05-23

نقل قول :... در مورد پست شما من خودم رو سی کار می دونستم ولی باید یه مقدار از کار کمتر کنم و بیشترمطالعه کنم... :oops:
[ltr]
out of curiosity, can I know whats your job?
[/ltr]


- babaklinux - 2009-11-07

سلام ببخشید این برنامه الان مشکلش کجاست ؟

کد :
#include <iostream>
int main()
{
std::cout <<"hello world";
return0;
}

من اینجوری اجزا میکنم error میده

کد :
g++ test.cpp -o test

اما این error میده

کد :
baber@baber-desktop:~/Desktop$ g++ test.cpp -o test
test.cpp: In function ‘int main()’:
test.cpp:5: error: ‘return0’ was not declared in this scope



- مهمان - 2009-11-07

کد :
return[space]0



- babaklinux - 2009-11-07

ممنون درست شد ۱ سوال دیگه در این حالت خروجی پشت خط مینویسه یعنی به این صورت
کد :
hello worldbaber@baber-desktop:~/Desktop$

آیا امکانش هست که جلوی خط بنویسه

کد :
baber@baber-desktop:~/Desktop$ hello world

یا کلا به صورتی دیگر


- ilius - 2009-11-07

کد :
std::cout << "hello world\n";
یا:
کد :
std::cout << "hello world" << std::endl;



- مهمان - 2009-12-04

سلام
من می خوام یه B-Tree با لیست های پیوندی بسازم . من یه الگوریتم بازگشتی نوشتم اما کار نداد . میشه یه الگوریتم ارایه بکنید؟ من می خوام یه درخت با i گره بسازم. در c++