2012-09-06 5 views
1

저는 Littleman 컴퓨터 시뮬레이션을 작성 중이며 인덱싱 연산자 []에 과부하를 걸고 싶습니다. LMC라는 클래스를 만들고 다음을 수행했습니다.연산자 C++에서 오버로드 및 배열 처리

#include <iostream> 

using namespace std; 

class LMC 
{ 
    public: 
     LMC(); 
     void display(); 
     int& operator[](int index); 
     ~LMC(); 
    private: 
     int **array; 
}; 

LMC::LMC() 
{ 
    array = new int*[100]; 
    for(int i = 0; i < 100; i++) 
    { 
     array[i] = new int[3]; 
    } 
    return array; 
} 

void LMC::display() 
{ 
    for(int i = 0; i < 100;i++) 
    { 
     for(int j = 0; j <3;j++) 
     { 
      array[i][j] = 0; 
      array[i][2] = i; 
      cout << array[i][j]<<" "; 
     } 
     cout << endl; 
    } 
} 
int& LMC::operator[](int index) 
{ 
    return array[index][2]; 
} 

    LMC::~LMC() 
    { 
    for(int i =0; i < 100 ; i++) 
    { 
     delete [] array[i]; 
    } 
    delete [] array; 
    array = NULL; 
    } 

    int main() 
    { 
    LMC littleman; 
    while(true) 
    { 
     int mailbox; 
     int function; 
     cout << "What is Mailbox number?" << endl; 
     cin >> Mailbox; 
     cout << "What is the function you want to use?" <<endl; 
     cin >> finction; 
     //the function is numbers eg 444 and 698; 
     littleman.display(); 
     littleman[Mailbox] = function; 
     } 
    return 0; 
} 

오류없이 프로그램을 실행할 수 있습니다. 내가 그 때 mailbox = 0function = 123 아무 문제도 없다.

이 표시됩니다 :

0 0 0 
1 0 0 
2 0 0 
3 0 0 
//continuing to 99 

이 디스플레이는 잘못된 것입니다. 다음은 표시해야합니다

0 0 123 
1 0 0 
2 0 0 
//continuing to 99 

내가 논리적 오류가 있습니까 또는 내가 원본을 표시하고 어떻게 고칠 수 배열을 무시하고? LMC::display()에서

+7

내부 배열의 문제를 해결하고'int **'대신'std :: vector >'을 사용하십시오. –

+0

'0 0 0' 그것은'LMC :: display()'의 출력입니까? – Andrey

+0

@Andrey 예, 출력물입니다. –

답변

0

이 라인

array[i][j] = 0; 
    array[i][2] = i; 

는 표시하려는 배열의 내용을 파괴한다.

void LMC::display(); 끝에 추가 세미콜론이 있으므로 코드가 컴파일되지 않아야합니다.

0

귀하의 코드는, 즉 컴파일 못하게 오류의 숫자가 다음 LMC() 생성자

  • 을, 당신은 return array; 있습니다. 생성자는 아무 것도 반환하지 않으며 반환 유형이 없기 때문에 return을 사용할 수 없습니다.
  • void LMC::display() 이후에는 사용자가 ;이됩니다. 이것은 정의가 아니기 때문에 오류입니다. 생략하고 그냥 두어야합니다.
  • void LMC::display()operator[] 직전에 } 닫음이 없습니다. main()
  • 당신 Mailbox 오타있다 (또 다른 하나의 경우에는 자본 M, m 및 일반한다. C에서 +++ Mailboxmailbox는 다른 변수) 대신 함수 finction. 문제에 관해서는

, 당신은 display() 함수에서 ARAY의 값을 다시 작성하고 있습니다 : 어떤 결과가 표시되지 않는 이유

array[i][j] = 0; 
array[i][2] = i; 

있다고.