2014-02-26 3 views
0

15 분 전에 질문을했고 닫았습니다. main()에서 간단한 테스트를 시도했기 때문에 닫았습니다. 그러나 실제 코드에서는 작동하지 않습니다.C++ short를 사용하여 int 배열 인덱싱

배경에는 부호가없는 짧은 인덱서를 통해 액세스 할 수없는 부호없는 정수 배열이 있습니다. 스택에 배열을 선언하면 작동하지만 배열 데이터 멤버는 작동하지 않습니다. 여기

배열의 선언입니다 :

typedef unsigned int uint; 

class OB{ 
public: 
    OB(); 
    void x(unsigned short side_pos); 

private: 
    uint best_p[2]; 
}; 

여기에 내가 컴파일러 오류 얻을 코드입니다 : 내가 할 경우

void OB::x(unsigned short side_pos){ 
    unsigned int best_price = best_p[side_pos]; 
} 

을 :

void OB::x(unsigned short side_pos){ 
    unsigned short something_else = 1; 
    unsigned int best_price = best_p[something_else]; 
} 

나는 또한 얻을 컴파일러 오류 :

OB.cpp: In member function ‘void OB::x(short unsigned int)’: 
OB.cpp:62:56: error: invalid types ‘unsigned int[short unsigned int]’ for array subscript 
    unsigned int best_price = best_p[side_pos]; 
+1

로컬 변수가 없다는 것이 확실하고 확실한가요? – chris

+0

@chris는 대답으로 넣었습니다. (필자는 제 컴파일러 오류 중 하나에서 여러 선언이 있었지만 다른 것에 대해서는 "this-> my_array []"로 고정했습니다). – user997112

+1

더 나은 : 다른 이름을 사용하십시오. 그림자는 때때로 유용 할 수 있지만 대개 컴파일 오류 만 발생시킵니다. –

답변

0

직관 및 의견 힌트에 따르면 클래스 멤버를 섀도 잉하는 로컬 변수 best_p (그 모양으로는 unsigned int)이 있습니다. 따라서 best_p[side_pos]은 데이터 멤버가 아닌 로컬 변수를 사용합니다.

컴파일러에서 섀도 잉을 포착하려면 -Wshadow 옵션을 사용해야합니다. 그것이 할 때 제일 좋은 것은 뭔가를 개명하는 것입니다. 데이터 멤버 이름 (m_<name>)에 대한 규칙을 사용하면 우발적 인 섀도 잉과 무언가의 이름을 바꿀 대상에 대한 생각을 방지 할 수 있습니다.

0

내 컴퓨터에서 컴파일됩니다. 그 오류를 얻는 방법은 배열 대신 변수를 사용하는 것입니다. 속성의 이름을 확인하십시오.