2012-04-20 21 views
7
#include <iostream> 
using namespace std; 

class A { 
    typedef int myInt; 
    int k; 
public: 
    A(int i) : k(i) {} 
    myInt getK(); 
}; 

myInt A::getK() { return k; } 

int main (int argc, char * const argv[]) { 
    A a(5); 
    cout << a.getK() << endl; 
    return 0; 
} 

Myint nie jest rozpoznawany przez kompilator jako „int” w tej linii:C++ typedef i typy zwracane: jak zmusić kompilator do rozpoznania typu zwracanego utworzonego za pomocą typedef?

myInt A::getK() { return k; } 

Jak mogę uzyskać kompilator rozpoznać Myint jako int?

Odpowiedz

19

typedef tworzy synonimy, nie nowe typy, więc myInt i int są już takie same. Problemem jest zasięg - nie ma myInt w zasięgu globalnym, musisz użyć A::myInt poza klasą.

A::myInt A::getK() { return k; } 
+1

+1, chociaż mogę użyć * alias * zamiast * synonim * – AJG85

2

A::myInt A::getK() { return k; }

Musisz zakwalifikować typ typedef bo stworzył go wewnątrz klasy A zakresie.

-2

Umieść definicję poza klasą.