[ LightBow @ 14.01.2006. 11:30 ] @
Napravio sam klasu Supplier i u main programu deklarisao niz:
Code:
Supplier* suppliers[10];

zatim sam napunio matricu s 10 objekata.
Sada mi je potrebno da pozovem funkciju supMask() iz drugog fajla, mask.cpp, gde sam je definisao ovako:

Code:
void supMask(Supplier* suppliers[]) {
    for(int i=0; i<10;i++) {
        cout<<suppliers[i]->getName()<<endl;
        }
}

a pozivam iz main fajla ovako:
Code:
supMask(suppliers[10]);

Kompajlira ok, ali mi daje gresku pri linkovanju:
error LNK2001: unresolved external symbol "void __cdecl supMask(class Supplier *)
U cemu je greska?
[ dado_k @ 14.01.2006. 12:27 ] @
prouči malo pointere...
[ ljube @ 14.01.2006. 13:46 ] @
Pokusaj ovako:

U kodu da prosledis:

Code:

supMask((Supplier*)suppliers);



Code:

void supMask (Supplier* psup) // ocekuje pointer na Supplier klasu, ne zna koliko objekat a ce biti u nizu
{
    for(int i=0; i<10;i++) {
        cout<<suppliers[i]->getName()<<endl;
        }
}


[ Goran Arandjelovic @ 14.01.2006. 17:06 ] @
A i ako je to niz tvojih objekata, pa i prostih tipova, napiši neku wrapper klasu... nešto kao "MyObjectsArray" pa funkciji samo taj objekat prosledi i nemaš brige oko nizova i matrica... Može i overload operatora i sl. Zavisi koliko je veliko to što pišeš...dakle, od potreba.
[ LightBow @ 14.01.2006. 23:23 ] @
Kada stavim Ljubetov kod, i plus u definiciji funkcije promenim "->" u ".", onda kompajlira, ali dobijem run-time gresku. Da li bi neko znao da mi objasni u cemu je greska, zasto ni moj originalni kod nije radio?
Hvala
[ ljube @ 15.01.2006. 16:59 ] @
Nisam obracao paznju na sadrzaj supMask.

U svakom slucaju evo ti primjer koda koji radi:

Code:

#include <iostream>
using namespace std;

class Supplier 
{
public:
  Supplier() { 
    strcpy(name, "name not set!");
  }
  ~Supplier() {
  }



  void setName(char * namex) 
  {
        if (name) strcpy(name, namex);
  };
  
  char * getName() {
    return     name;
  }
  
protected:
char name[50];
   
};


int main(int argc, char* argv[])
{    int x = 0;
    char name[20];
    Supplier * suppliers = new Supplier[10];

    for (x = 0; x<10; x++) {
        sprintf((char*)name, "supplier No.%d", x);
        suppliers[x].setName(name);
    }

    
    for (x = 0; x<10; x++) {
        cout<<suppliers[x].getName()<<endl;
    }
    
       delete [] suppliers;
    return 0;
}



Program moze da ti puca i na nekim drugim mjestima.

Lj.
[ LightBow @ 18.01.2006. 05:31 ] @
Hvala Ljube, ali proradio je moj originalni kod kada sam pozvao funkciju sa
supMask(suppliers)
bez [].