Witam
Chciałbym umieścić definicje funkcji w main taky aby miała dostęp do zmiennych z main , ale kompilator wyrzuca błąd, jakaś rada?
Pozdrawiam i czekam z niecierpliwością na odpowiedź
Witam
Chciałbym umieścić definicje funkcji w main taky aby miała dostęp do zmiennych z main , ale kompilator wyrzuca błąd, jakaś rada?
Pozdrawiam i czekam z niecierpliwością na odpowiedź
Do funkcji przekazuje się dane przez argumenty.
int suma(int x, int y){
return x+y;
}
int main(){
int x,y;
cin>>x>>y;
cout<< suma (x,y); //voila, funkcja ma dostęp do zmiennych z main
}
znam tą metodę ale czy można umieścić definicje metody w main?
Albo jeszcze bardziej zagnieżdzając definicja metody w metodzie?
Nie, bo i po co miałbyś to robić? o_O Głowe dam że coś zrobiłeś źle, skoro potrzebujesz takich dziwnych konstrukcji...
nic nie zrobiłem źle , po prostu chciałbym wiedzieć czy mogę tworzyć metody o lokalnym zakresie z dostępem do lokalnych zmiennych
Zdefiniujmy funkcję w funkcji w funkcji, a tą w jeszcze innej funkcji. A co będziemy się pieścić! ;P.
Zastanów się nad tym jak użyć parametrów funkcji tak żeby nie było ich kilkanaście. A jeżeli potrzebujesz dużo danych to użyj np. struktury. O zmiennych globalnych radzę nawet nie myśleć, bo to jest krótka droga do trudnych do znalezienia błędów
po prostu chciałbym wiedzieć czy mogę tworzyć metody o lokalnym zakresie z dostępem do lokalnych zmiennych
W zgodnym ze standardem C++ nie (z tego co pamiętam GCC ma do tego jakieś rozszerzenie). Pisałeś wcześniej w jakimś języku który to umożliwiał (np. Scala, D, Pascal, Python, Common Lisp, Haskell) - pytam z ciekawości?
ale ja pytam nie o różne metody, które mogę zastosować tylko pytam o możność tworzenia motod zasięgu lokalnym z dostępem do zmiennych lokalnych
Ale dziękuje bardzo za odpowiedzi
pozwole sobie spytać jeszcze : Stworzyłem zmienną globalna typu int x; stworzyłem też tablice intów także globalną a kompilator pluje się że nie ma deklaracji jedynie zmiennej x, why?
@Tezcatlipoca dziękuje, odpowiedź na twoje pytanie: nie pisałem
int pierwsza, druga;
std::cin >> pierwsza >> druga;
auto suma1 = [](int x, int y) -> int { return x + y; };
auto suma2 = [=]() -> int { return pierwsza + druga; };
auto suma3 = [pierwsza, druga]() -> int { return pierwsza + druga; };
std::cout << suma1(pierwsza, druga) << " " << suma2() << " " << suma3();
Więcej informacji: http://msdn.microsoft.com/en-us/library/dd293603.aspx
#include <cstdlib>
#include <iostream>
#include <iomanip>
using namespace std;
//----------------------------------------------------
// a b c d e f g h i
int tab[9][9] = { {0 ,10,20,30,40,50,55,60,65}, //a
{10,0 ,10,20,30,40,45,50,55}, //b
{20,10,0 ,20,30,40,45,50,55}, //c
{30,20,20,0 ,40,50,55,60,65}, //d
{40,30,30,40,0 ,5 ,10,15,20}, //e
{50,40,40,50,5 ,0 ,5 ,10,15}, //f
{55,45,45,55,10,5 ,0 ,5 ,10}, //g
{60,50,50,60,15,10,5 ,0 ,10}, //h
{65,55,55,65,20,15,10,10,0 } //i
};
//Miasto startowe
int mStart = 0;
//Tablica punktów sąsiedztwa
int sTab[8];
//Minimum
int min = 0 ;
int main(int argc, char *argv[])
{
void uSasiedztwo(int);
//----------------------------------------------------
//Losowanie miasta startowego///////////////////////////
srand( (unsigned)time( NULL ) );
mStart = ( rand() % 9 );
uSasiedztwo(mStart);
for(int i = 0 ; i < 8 ; i++ ){
if( ( tab[mStart][ sTab[i] ] < min ) || ( min == 0) ){
min = tab[mStart][ sTab[i] ];
}
}
system("PAUSE");
return EXIT_SUCCESS;
}
//--------Metody--------------------------------------
void uSasiedztwo(int miasto){
for(int i = 0; i < 8 ; i++){
for(int k = 0; k < 9 ; k++){
if(k != miasto){
sTab[i] = k;
}
}
}
}
I czemu nie widzi min w main?
nie „nie widzi”, tylko ambiguous symbol, czyli „symbol niejednoznaczny”.
istnieje w bibliotece C++ już funkcja o takiej nazwie, a zapis using namespace std
powoduje jej wciągnięcie do zasięgu — i nagle masz dwie nazwy min
znaczące co innego.
mi dev wyrzucił że min jest nie zadeklarowane, dziękuje za pomoc