2013-03-05 2 views
1

함수 내부에서 typedef를 어떻게합니까? 클래스 B가 int x 데이터 멤버를 가지고 있다고 가정 해 보겠습니다. 다음을 컴파일하려고 할 때 : '.'토큰 앞에 예상 된 이니셜 라이저를 얻습니다.클래스 내의 Typedef

이 예제에서는 모든 것이 간단하지만 코드에서는 test.x.y.z.f와 같은 작업을 수행 할 것입니다. 그래서 필자는 필요한 datamember에 도달 할 때까지 객체 내에 여러 객체를 가지고 있으므로 typedef가 도움이 될 것입니다.

class A 
{ 
    B test; 

    A(B test1) 
    { 
    test = test1; 
    } 

    function f() 
    { 
    typedef test.x x; //how come this doesn't compile? 

    } 
} 
+1

개체 또는 데이터 멤버 전용 형식을 typedef 할 수 없다고 생각합니다 – andre

+1

typedef로 무엇을하려고합니까? 형식을 선언하지 않고 멤버 변수에 액세스하려는 것 같습니다. typedef가하는 일에 대해 읽어 볼 필요가 있다고 생각합니다. –

답변

1

typedef에는 유형의 이름이 있습니다.
test.x은 유형이 아닌 변수입니다.
int이지만 그 자체는 int이 아닙니다.

변수의 새 이름을 입력하려면 참조을 사용하십시오.

int& x = test.x; // "x" is now a different name for test.x 
int& y = test.x.y.z.f; // "y" is now a different name for test.x.y.z.f. 
+0

정말 고마워! – marcwho

4

x는 가변이 아니유형이다. 11 ++ C에서 당신은 x의 유형을 결정하는 decltype을 사용할 수

void f() 
{ 
    decltype(test.x) x; 
} 

을 또는, 당신은 당신이 작업하고자하는 회원의 로컬 참조 선언 할 수 :

void f() 
{ 
    auto& x_ref(test.x); // Or explictly state the type. 
} 
1

당신이 만약을 변수와 함께 typedef을 시뮬레이트하려면 참조를 사용하십시오. type_of_x& x = test.x;

+0

'B :: x'의 종류는 무엇입니까? – andre

1

나는 당신을 위해 무엇을 요구하는 것은 방법으로 "속기"이름의 긴 시퀀스의 내용입니다 생각 . , ISN ', 즉 읽고 조금 쉽게 지금

for(int i = 0; i < 10; i++) 
{ 
    Blah &b = y.var.arr[i]; 

    b.x *= 4; 
    b.y *= 3; 
    b.z *= 5; 
} 

:

struct Blah 
{ 
    int x, y, z; 
}; 

class X 
{ 
    Blah *arr[10]; 

    X() 
    { 
     for(int i = 0; i < 10; i++) 
     { 
     arr[i] = new Blah; 
     } 
    } 
} 

class Y 
{ 
    X var; 
}; 


Y y; 

for(int i = 0; i < 10; i++) 
{ 
    y.var.arr[i]->x *= 4; 
    y.var.arr[i]->y *= 3; 
    y.var.arr[i]->z *= 5; 
} 

은 다음과 같이 쓸 수있다 : 내가 과거 (관련)에 이런 짓을 한 방법은 참조를 사용하는 것입니다 그렇지?

+0

네, 그게 정확히 내가 필요했던 것입니다, 감사합니다. – marcwho