Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Featured Replies

Здравейте, съвсем отскоро реших да изуча доколкото е възможно C++ и реших да напиша една "малоумна" програма, но ми излиза код error C2447: missing function header иползвам Visual C++ 2005.


# include "stdafx.h"
# include <iostream>

int x;
int y;

{

int main();

using namespase std;

int x;
int y;

count << " Въведете десетично число " << endl;
cin >> x;
cout << " Въведете друго десетично число " << endl;
cim >> y;
cout << " Сборът на числата е " << endl;
cin >> (int x+ int y);

return 0;

}

Редактирано от viiipeer (преглед на промените)


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



int main()
{

int x;
int y;

cout << " Enter first number" << endl;
cin >> x;
cout << "Enter second number " << endl;
cin >> y;
cout << " Sum is" << endl;
cout << (x+ y);

return 0;
}

В кода, който си сложил имаш една камара грешки. Горе е коригираната програма.

Редактирано от gueswho (преглед на промените)

  • Автор

В кода, който си сложил имаш една камара грешки. Горе е коригираната програма.

Благодаря! Пробвах също, всмето текста за въвеждане на числа да е на ENG да е на BG, ама изкарва йероглифи.

Подведох се, че using namespace std; се слага вътре в main() функцията от това видео, не знам дали важи за всички програми.

P.S. Всъщност няма значение дали ще е в main (), програмата пак тръгва.


#include "stdafx.h"
#include <iostream>



int main()
{
using namespace std;


int x;
int y;

cout << " Enter first number" << endl;
cin >> x;
cout << "Enter second number " << endl;
cin >> y;
cout << " Sum is" << endl;
cout << (x+ y);

return 0;
}

Редактирано от viiipeer (преглед на промените)

  • Автор

За да не отварям нова тема ще пиша в тази. Понеже се уча от интернет уроци и то на английски, интересува ме за операторите, кое е оператора (в смисъл че това на втория ред след Record, задължително ли трябва да е така, или може каквото си искам име да му дам) ?

1 char szName[25]; // let's hope their name is less than 25 chars!

2 Record asRecordArray[500]; // let's hope there are less than 500 records!

3 Monster asMonsterArray[20]; // 20 monsters maximum

P.S. или по-точно думата record е "свободна", а оператор е asRecordArray?

Редактирано от viiipeer (преглед на промените)

За да не отварям нова тема ще пиша в тази. Понеже се уча от интернет уроци и то на английски, интересува ме за операторите, кое е оператора (в смисъл че това на втория ред след Record, задължително ли трябва да е така, или може каквото си искам име да му дам) ?

1 char szName[25]; // let's hope their name is less than 25 chars!

2 Record asRecordArray[500]; // let's hope there are less than 500 records!

3 Monster asMonsterArray[20]; // 20 monsters maximum

Ето едно добро ръководство за променливи (защото това, което цитираш са дефиниции на променливи)

http://www.cplusplus.com/doc/tutorial/variables/

А ето малко за оператори

http://www.functionx.com/cpp/Lesson04.htm

  • Автор

Ето едно добро ръководство за променливи (защото това, което цитираш са дефиниции на променливи)

http://www.cplusplus.com/doc/tutorial/variables/

А ето малко за оператори

http://www.functionx.com/cpp/Lesson04.htm

Благодаря! Мисълта ми беше, че срещу всяка функция, името трябва да започва с префикс от една или няколко букви от функцията - Am I right?;-)

Редактирано от viiipeer (преглед на промените)

  • 1 месец по-късно...
  • Автор

Какво точно означават тези 2 префикса, пред буквата "B" и по-точно n? m_nB За m,знам че идва от съкращението "member", но за n...

Редактирано от viiipeer (преглед на промените)

Какво точно означават тези 2 префикса, пред буквата "B" и по-точно n? m_nB За m,знам че идва от съкращението "member", но за n...

??? къде това?
  • Автор

??? къде това?

Абе то е ясно, че няма да стане програмист от мен, но поне чета за C++, това е от този урок.

class Access
02	{
03	   int m_nA; // private by default
04	   int GetA() { return m_nA; } // private by default
05	 
06	private:
07	   int m_nB; // private
08	   int GetB() { return m_nB; } // private
09	 
10	protected:
11	   int m_nC; // protected
12	   int GetC() { return m_nC; } // protected
13	 
14	public:
15	   int m_nD; // public
16	   int GetD() { return m_nD; } // public
17	 
18	};
19	 
20	int main()
21	{
22	    Access cAccess;
23	    cAccess.m_nD = 5; // okay because m_nD is public
24	    std::cout << cAccess.GetD(); // okay because GetD() is public
25	 
26	    cAccess.m_nA = 2; // WRONG because m_nA is private
27	    std::cout << cAccess.GetB(); // WRONG because GetB() is private
28	 
29	    return 0;
30	}

int m_nB;

Редактирано от viiipeer (преглед на промените)

Абе то е ясно, че няма да стане програмист от мен, но поне чета за C++, това е от този урок.

class Access
02	{
03       int m_nA; // private by default
04       int GetA() { return m_nA; } // private by default
05     
06	private:
07       int m_nB; // private
08       int GetB() { return m_nB; } // private
09     
10	protected:
11       int m_nC; // protected
12       int GetC() { return m_nC; } // protected
13     
14	public:
15       int m_nD; // public
16       int GetD() { return m_nD; } // public
17     
18	};
19     
20	int main()
21	{
22    	Access cAccess;
23    	cAccess.m_nD = 5; // okay because m_nD is public
24    	std::cout << cAccess.GetD(); // okay because GetD() is public
25     
26    	cAccess.m_nA = 2; // WRONG because m_nA is private
27    	std::cout << cAccess.GetB(); // WRONG because GetB() is private
28     
29    	return 0;
30	}

int m_nB;

Хм, това е просто име на променлива. Защо е наречена така - ами автора може да има специална причина, но от гледна точка на компилатора няма никакво значение как е наречена.

Разбира се за да бъде по-четим (за човека) кода е добре да се дават смислени имена на промеливи и функции

  • Автор

Хм, това е просто име на променлива. Защо е наречена така - ами автора може да има специална причина, но от гледна точка на компилатора няма никакво значение как е наречена.

Разбира се за да бъде по-четим (за човека) кода е добре да се дават смислени имена на промеливи и функции

Значи кода ще работи и ако пред B, няма буквите m_n?

  • Автор

Да, ако навсякъде се обръщате към променлива B, а не m_nB

Благодаря все пак за отговора, но така и не можахте да ми отговорите точно на въпроса, а той беше, какво точно означават префиксите, не случайно са сложени!

Ето и друг пример, class Employee

03 {

04 public:

05 char m_strName[25];

06 int m_nID;

07 double m_dWage;

както и Employee cAlex;

30 cAlex.SetInfo("Alex", 1, 25.00);

31

32 Employee cJoe;

33 cJoe.SetInfo

Конкретно за втория пример, c според мен идва от префикса за class.

Редактирано от viiipeer (преглед на промените)

Благодаря все пак за отговора, но така и не можахте да ми отговорите точно на въпроса, а той беше, какво точно означават префиксите, не случайно са сложени!

Ще отговоря пак: това не са префикси, а прочсто част от имената на променливи и функции. Възможно е автора на кода да е имал нещо предвид, така че питайте него. Но те НЯМАТ НИКАКВО ЗНАЧЕНИЕ за компилатора
  • Автор

Ще отговоря пак: това не са префикси, а прочсто част от имената на променливи и функции. Възможно е автора на кода да е имал нещо предвид, така че питайте него. Но те НЯМАТ НИКАКВО ЗНАЧЕНИЕ за компилатора

Сигурен ли си?

Using the “m_” prefix for member variables helps distinguish member variables from function parameters or local variables inside member functions. This is useful for several reasons. First, when we see an assignment to a variable with the “m_” prefix, we know that we are changing the state of the class. Second, unlike function parameters or local variables, which are declared within the function, member variables are declared in the class definition. Consequently, if we want to know how a variable with the “m_” prefix is declared, we know that we should look in the class definition instead of within the function.

Същото го има и за n сигурно, но не мога да го намеря.

Но те НЯМАТ НИКАКВО ЗНАЧЕНИЕ за компилатора

За него не, но нали се опитвам да разбера логиката и съответно базисните неща за езика...

Редактирано от viiipeer (преглед на промените)

Сигурен ли си?

Using the "m_" prefix for member variables helps distinguish member variables from function parameters or local variables inside member functions. This is useful for several reasons. First, when we see an assignment to a variable with the "m_" prefix, we know that we are changing the state of the class. Second, unlike function parameters or local variables, which are declared within the function, member variables are declared in the class definition. Consequently, if we want to know how a variable with the "m_" prefix is declared, we know that we should look in the class definition instead of within the function.

Същото го има и за n сигурно, но не мога да го намеря.

За него не, но нали се опитвам да разбера логиката и съответно базисните неща за езика...

По-горе много ясно е казано за кого са важни тези имена.

Можете да спазвате правила при именуването на променливи (това е добрия стил на програмиране), можете да именувате променливите си произволно, това по никакъв начин няма да повлияе на изпълнението!!!!

  • Автор

Къде бъркам, че компилатора ми дава следните грешки:

1>c:\users\seven\desktop\a\a\a.cpp(14) : error C2833: 'operator Cents' is not a recognized operator or type

1>c:\users\seven\desktop\a\a\a.cpp(14) : error C2059: syntax error : 'newline'

1>c:\users\seven\desktop\a\a\a.cpp(14) : error C2334: unexpected token(s) preceding '{'; skipping apparent function body

1>c:\users\seven\desktop\a\a\a.cpp(17) : error C2065: 'Cents' : undeclared identifier

1>c:\users\seven\desktop\a\a\a.cpp(17) : error C2146: syntax error : missing ')' before identifier 'cCents'

1>c:\users\seven\desktop\a\a\a.cpp(17) : error C2182: 'PrintCents' : illegal use of type 'void'

1>c:\users\seven\desktop\a\a\a.cpp(17) : error C2059: syntax error : ')'

1>c:\users\seven\desktop\a\a\a.cpp(18) : error C2143: syntax error : missing ';' before '{'

1>c:\users\seven\desktop\a\a\a.cpp(18) : error C2447: '{' : missing function header (old-style formal list?)

1>c:\users\seven\desktop\a\a\a.cpp(25) : error C2064: term does not evaluate to a function taking 1 arguments

1>Build log was saved at "file://c:\Users\Seven\Desktop\A\A\Debug\BuildLog.htm"

1>A - 10 error(s), 0 warning(s)

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

#include "stdafx.h"
#include <iostream>
class Dollars
	{
	private:
	    int m_nDollars;
	public:
	    Dollars(int nDollars=0)
	    {
	        m_nDollars = nDollars;
	    }
	 
	     // Allow us to convert Dollars into Cents
	     operator Cents() { return Cents(m_nDollars * 100); }
	};

void PrintCents(Cents cCents)
	{
	    cout << cCents.GetCents();
	}
	 
	int main()
	{
	    Dollars cDollars(9);
	    PrintCents(cDollars); // cDollars will be cast to a Cents
	 
	        return 0;
	}
?

Редактирано от viiipeer (преглед на промените)

  • Автор

Къде си декларирал Cents ?

Ами начинаещ съм и се опитвам да свържа двете части от тук

Here’s a new class called Dollars that provides an overloaded Cents cast operator:01 class Dollars

02 {

03 private:

04 int m_nDollars;

05 public:

06 Dollars(int nDollars=0)

07 {

08 m_nDollars = nDollars;

09 }

10

11 // Allow us to convert Dollars into Cents

12 operator Cents() { return Cents(m_nDollars * 100); }

13 };

This allows us to convert a Dollars object directly into a Cents object! This allows you to do something like this:01 void PrintCents(Cents cCents)

02 {

03 cout << cCents.GetCents();

04 }

05

06 int main()

07 {

08 Dollars cDollars(9);

09 PrintCents(cDollars); // cDollars will be cast to a Cents

10

11 return 0;

12 }

Consequently, this program will print the value:

900

which makes sense, since 9 dollars is 900 cents!

Но не съм сигурен, че последната част не се отнася, към началото на урока...

Overloading the typecast operators allows us to convert our class into another data type. Take a look at the following class:01 class Cents

02 {

03 private:

04 int m_nCents;

05 public:

06 Cents(int nCents=0)

07 {

08 m_nCents = nCents;

09 }

10

11 int GetCents() { return m_nCents; }

12 void SetCents(int nCents) { m_nCents = nCents; }

13 };

This class is pretty simple: it holds some number of cents as an integer, and provides access functions to get and set the number of cents. It also provides a constructor for converting an int into a Cents.

If we can convert an int into a Cents, then doesn’t it also make sense for us to be able to convert a Cents back into an int? In the following example, we have to use GetCents() to convert our Cents variable back into an integer so we can print it using PrintInt():01 void PrintInt(int nValue)

02 {

03 cout << nValue;

04 }

05

06 int main()

07 {

08 Cents cCents(7);

09 PrintInt(cCents.GetCents()); // print 7

10

11 return 0;

12 }

If we have already written a lot of functions that take integers as parameters, our code will be littered with calls to GetCents(), which makes it more messy than it needs to be.

To make things easier, we’ll overload the int cast, which will allow us to cast our Cents class into an int. The following example shows how this is done:01 class Cents

02 {

03 private:

04 int m_nCents;

05 public:

06 Cents(int nCents=0)

07 {

08 m_nCents = nCents;

09 }

10

11 // Overloaded int cast

12 operator int() { return m_nCents; }

13

14 int GetCents() { return m_nCents; }

15 void SetCents(int nCents) { m_nCents = nCents; }

16 };

There are two things to note:

1) To overload the function that casts our class to an int, we write a new function in our class called operator int(). Note that there is a space between the word operator and the type we are casting to.

2) Casting operators do not have a return type. C++ assumes you will be returning the correct type.

Now in our example, we call PrintInt() like this:1 int main()

2 {

3 Cents cCents(7);

4 PrintInt(cCents); // print 7

5

6 return 0;

7 }

Къде си декларирал Cents ?

Дори да го декларирам, пак има грешки.

Редактирано от viiipeer (преглед на промените)

Дори да го декларирам, пак има грешки.

Но сигурно няма да е същата :)

Компилаторът ти показва точно на кой ред, каква грешка е открил. На теб остава да потърсиш начин да я коригираш.

Не се отчайвай ! Отначало е така.

  • Автор

Но сигурно няма да е същата :)

Компилаторът ти показва точно на кой ред, каква грешка е открил. На теб остава да потърсиш начин да я коригираш.

Не се отчайвай ! Отначало е така.

Дам, то но точно в Visual c++ не ти казва къде да търсиш.

P.S. Нека някой, който разбира, да компилира/свържи правилно програмата от цитираните кодове по-горе. Много ще съм му благодарен.

Редактирано от viiipeer (преглед на промените)

#include "stdafx.h"
#include <iostream>


using namespace std;

class Cents
{
private:
	int m_nCents;
public:
	Cents(int nCents=0)
	{
    	m_nCents = nCents;
	}

	// Overloaded int cast
	operator int() { return m_nCents; }

	int GetCents() { return m_nCents; }
	void SetCents(int nCents) { m_nCents = nCents; }
};


class Dollars
    	{
    	private:
        	int m_nDollars;
    	public:
        	Dollars(int nDollars=0)
        	{
            	m_nDollars = nDollars;
        	}
     	
         	// Allow us to convert Dollars into Cents
         	operator Cents() { return Cents(m_nDollars * 100); }
    	};

void PrintCents(Cents cCents)
    	{
        	cout << cCents.GetCents();
    	}
     	
    	int main()
    	{
        	Dollars cDollars(9);
        	PrintCents(cDollars); // cDollars will be cast to a Cents
     	
            	return 0;
    	}

Според теб, какво означава това съобщение на компилатора ?

1>c:\users\seven\desktop\a\a\a.cpp(17) : error C2065: 'Cents' : undeclared identifier

  • Автор

:) Мерси! :baby:

Според теб, какво означава това съобщение на компилатора ?

Да, но като за начинаещ, не показва къде точно трябва да се декларира.;-)

:) Мерси! :baby:

Да, но като за начинаещ, не показва къде точно трябва да се декларира.;-)

Задължително преди реда, на който е открита грешката :baby:

В случая 17 ред.

  • Автор

Правилно ли разбирам смисъл, че за point-терите от цитата, се разбира че не е непременно нужно да се пише пред всеки пойнтер знака *, ако се предхожда с знака "," както е цитирано или е точно обратното, че не може?

int * p1, p2;

p1 would indeed have int* type, but p2 would have type int (spaces do not matter at all for this purpose). This is due to operator precedence rules. But anyway, simply remembering that you have to put one asterisk per pointer is enough for most pointer users.

Регистрирайте се или влезете в профила си за да коментирате

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    32%
    Дарени 315 € от нужните 1 000 €

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.