PDA

View Full Version : مبتدی: اولین بارمه با C++ برنامه مینویسم یه کم مشکلاتی دارم



Arashdn
سه شنبه 18 مهر 1391, 19:26 عصر
سلام دوستان
من تا حدودی با C#‎ کار کردم و الان اومدم رو سی ++
یه سری سوالاتی دارم که مطرحش میکنم

1- به نظرتون واسه شروع از کدوم IDE و کدوم کامپیلر استفاده کنم؟
2- من فعلا با ویژوال استدیو و تحت کنسول یه کم کار کردم و تو یه برنامه خیلی ابتدایی چند تا سوال دارم
2.1 - تو دستور زیر چرا یکی از نیم اسپس ها توی "" هست و یکی تو <> ?

#include "stdafx.h"
#include <iostream>
دستور include در C++‎ معادل همون using در سی شارپ هست؟
2.2 - تو دستور
std::cout
این :: معادل همون . در سی شارپ هست؟
پیشاپیش ممنون که هوای ما مبتدی ها رو دارید ...

مسعود اقدسی فام
سه شنبه 18 مهر 1391, 20:33 عصر
۱- IDE هر کدوم که راحتی. بهتره بروز باشه.

۱-۲- اونی که "" یعنی در مسیر جاری کدها دنبالش بگرد. اما اونی که <> داره از محل پیش فرضی که توسط محیط معرفی شده جستجو می‌شه. "" ها معمولا اون h هایی هستن که خودتون نوشتید.

۲-۲- هم آره و هم نه. یعنی :: می‌شه نقطه ولی نقطه به :: تبدیل نمی‌شه. :: برای فضای نام (namespace) استفاده می شه. اینجا یعنی از فضای نام std کلاس cout. ولی اگه از اون کلاس یه زیر کلاس یا متد مد نظر باشه مثلا می شه ns::asasas.dsdsdds . یعنی بعد مشخص شدن فضای نام بعدی‌ها دیگه مثل خود سی شارپ نقطه می‌خورن.

Arashdn
سه شنبه 18 مهر 1391, 21:21 عصر
۱- IDE هر کدوم که راحتی. بهتره بروز باشه.
همون ویژوال استدیو 2010 رو تایید میکنید؟
میشه کاری کرد روش .نت نباشه و فقط خود سی ++ اصلی و Native باشه؟


معمولا اون h هایی هستن که خودتون نوشتید. منظور از h چیه؟

خیلی خیلی ممنون

مسعود اقدسی فام
سه شنبه 18 مهر 1391, 21:42 عصر
آره ویژوال استودیو هم خوبه. شما Console Application درست کنید اصلا دات نت نداره. نوع پروژه رو هم Empty Project انتخاب کنید تا کلا یه فایل پروژه خالی ( بدون "stdafx.h" و غیره) بهتون بده.
فایل‌های h یا header files فایل‌هایی هستن که می‌تونن قسمتی از کد برنامه رو شامل بشن. مثلا می‌تونید داخل این فایل تعریف کلی یه کلاس رو بنویسد. بعد هر برنامه‌ای که اون کلاس رو لازم داره include کنید. البته فایل h متن هست. با obj که باینری هست و یه سری مسائل پیشرفته برای الحاق به پروژه می‌خوام فرق دارن.

Arashdn
چهارشنبه 19 مهر 1391, 07:20 صبح
آره ویژوال استودیو هم خوبه. شما Console Application درست کنید اصلا دات نت نداره. نوع پروژه رو هم Empty Project انتخاب کنید تا کلا یه فایل پروژه خالی ( بدون "stdafx.h" و غیره) بهتون بده.
بعد ایجاد یه empty project باید add new item کنم و c++ file اضافه کنم و اونجا متد main ام رو بنویسم
درسته؟

ممنون

مسعود اقدسی فام
چهارشنبه 19 مهر 1391, 09:07 صبح
بعد ایجاد یه empty project باید add new item کنم و c++ file اضافه کنم و اونجا متد main ام رو بنویسم
درسته؟

ممنون

بله، همینطوره.

lpeiatb
پنج شنبه 20 مهر 1391, 00:15 صبح
سلام و خسته نباشید خدمت اساتید محترم
از صاحب تاپیک و سایر دوستان عذر میخوام که سوالم رو اینجا میپرسم
بنده این ترم درس گرافیک دارم و استاد ما داره باهامون OpenGL و C++‎ 6.0 کار میکنه
هیچ آشنایی با این نرم افزار ها نداشتم تا به حال
حالا به عنوان اول تجربه بهمون یه سری کد داده که بنویسیم و نتیجش رو ببینیم، اما موقع اجرا با این ارور مواجه میشم:



Compiling...
Project OpenGL.cpp
c:\program files\microsoft visual studio\myprojects\project opengl\project opengl.cpp(2) : fatal error C1083: Cannot open include file: 'GL/glut.h': No such file or directory
Error executing cl.exe.

از روی ارور میشه فهمید که "GL/glut.h" روی سیستم وجود نداره، اما نمیدونم چی هست چجوری باید این مشکل رو رفع کرد
استاد فرمودند باید Open gl نصب کنیم تا درست شه، منم دانلودش کردم اما نمیدونم کجا باید بریزمش، ممنون میشم راهنمایی کنید
تشکر

Arashdn
شنبه 22 مهر 1391, 16:15 عصر
سلام
مشکل جدید من
تو برنامه زیر
#include <iostream>





void main()
{
int a;
std::cout << "PLease choose\n1:Left 2:Right";
std::cin >> a ;
if (a = 1)
left();
else if (a=2)
right();
}

void left()
{
for (int i=0;i<20;i++)
{
for (int j = 0;j<=i;j=j+1)
{
//std::cout << j;
std::cout << "*";
}//forj
std::cout << "\n";
}//for i
}
void right()
{
}

ویژوال استدیو ارور های زیر رو میده
Error 2 error C3861: 'right': identifier not found c:\users\arash\desktop\star_printer\star_printer\m ain.cpp 15 1 star_printer
Error 1 error C3861: 'left': identifier not found c:\users\arash\desktop\star_printer\star_printer\m ain.cpp 13 1 star_printer

دلیل از چیه؟
تو استفاده از متد هام چه مشکلی بوده ؟ تو ساختشون مشکل بوده؟

m.a.sh
شنبه 22 مهر 1391, 17:12 عصر
دوست عزیز
مشکل تو توی اینه که تابع left و right رو زیر تابع main نوشتی و اون نمیشناسه
من کدتو توی ویژوال استودیو باز کردم
اول پیغامی که به تو میداد به من هم داد
بعد اون دوتا تابع رو بردم اول کار یعنی زیر #include <iostream> جواب داد

مسعود اقدسی فام
شنبه 22 مهر 1391, 17:27 عصر
سلام
مشکل جدید من
تو برنامه زیر
#include <iostream>





void main()
{
int a;
std::cout << "PLease choose\n1:Left 2:Right";
std::cin >> a ;
if (a = 1)
left();
else if (a=2)
right();
}

void left()
{
for (int i=0;i<20;i++)
{
for (int j = 0;j<=i;j=j+1)
{
//std::cout << j;
std::cout << "*";
}//forj
std::cout << "\n";
}//for i
}
void right()
{
}

ویژوال استدیو ارور های زیر رو میده
Error 2 error C3861: 'right': identifier not found c:\users\arash\desktop\star_printer\star_printer\m ain.cpp 15 1 star_printer
Error 1 error C3861: 'left': identifier not found c:\users\arash\desktop\star_printer\star_printer\m ain.cpp 13 1 star_printer

دلیل از چیه؟
تو استفاده از متد هام چه مشکلی بوده ؟ تو ساختشون مشکل بوده؟

دوست عزیز، در زبان‌های برنامه‌نویسی C یا ++C هر چیزی که استفاده می‌کنید قبل از استفاده باید تعریف شده باشه. هر چیزی غیر از کلمات کلیدی که جندان زیاد نیستن یه تعریفی دارن. حتی برای cin و cout فایل iostream رو بالا اضافه نکنید خظا می‌ده که عبارت نامفهمومی هستن.


همونطور که دوستمون گفتم left و right رو بعد از main نوشتید. اما داخل main فراخوانی کردید. یه راه دیگه اینه که بذارید توابع سر جاشون بمونه و از پیش تعریف استفاده کنید:




void left();

void right();

void main()
{
.
.
.
left();
right();
.
.
.
}

void left()
{
.
.
.
}

void right()
{
.
.
.
}




چنین ساختاری یه جاهایی اجباریه. یعنی محبورید از این روش استفاده کنید. یه جایی دو تابع A و B نوشته می‌شه که هر دو یه جایی از کد ممکنه اونیکی رو فراخوانی کنه. بالاخره یا A می‌تونه اول نوشته بشه یا B. در این حالت از پیش‌تعریف استفاده می‌کنن.

Arashdn
چهارشنبه 03 آبان 1391, 17:04 عصر
سلام دوستان
معادل این دستور سی شارپ
string sss;
sss = "Hello";
if(sss.Contains("H"))
{
}
تو سی ++ چی میشه؟

بهزاد علی محمدزاده
چهارشنبه 03 آبان 1391, 18:34 عصر
سلام . همچین وقتهایی سریع برو سراغ رفرنس اون زبان و ببین مثلا در مورد String چی داره . این لینک (http://www.cplusplus.com/reference/string/string/) مربوط به String هست . توابع رو که نگاه کنی ، find رو توش پیدا می کنی ، لینکش (http://www.cplusplus.com/reference/string/string/find/) و کلیک کن اونجا نمونه ایی رو هم می تونی ببینی .

Arashdn
جمعه 05 آبان 1391, 09:35 صبح
من الان دقیق متوجه نشدم این تابع find چیکار میکنه؟؟!!
یه کم بیشتر راهنمایی میکنید؟

راستی مفهوم این std::string::npos چیه؟

و اینکه std::endl برای برده پوینتر به یه خط پایین تره؟

ممنون که هوای ما مبتدی ها رو دارید ...

Arashdn
جمعه 05 آبان 1391, 11:38 صبح
راستی یه سوال دیگه
من یه تابع بصورت زیر تعریف کردم
void left(int numb)
ولی هر وقت به این صورت میخوام ازش استفاده کنم
left(20);
با ارور
error C2665: 'left' : none of the 2 overloads could convert all the argument types
مواجه میشم
دلیل چی میتونه باشه؟

Arashdn
یک شنبه 07 آبان 1391, 18:31 عصر
کسی نیست راهنمایی کنه؟