2013-07-19 3 views
-2

C++ У меня есть код:Вызов массива 2D из другого метода того же класса -

#include <iostream> 

using namespace std; 

class tokoKomputer 
{ 
    public: 
     void notebook(); 
     void printNotebook(); 
}; 

void tokoKomputer::notebook() 
{ 
    string notebook[][8]= 
    { 
     {"MERK", "NO SERI", "HARGA", "STOK", "MEMORY", "HDD", "GPU", "DISPLAY"}, 
     {"Asus", "ASN0002", "2500000", "9", "1GB", "250GB", "128MB", "10"}, 
     {"Fujitsu", "FJN0001", "5500000", "12", "1GB", "320GB", "256MB", "14"}, 
     {"Fujitsu", "FJN0005", "6500000", "4", "4GB", "250GB", "1GB", "14"} 
    }; 
} 

void tokoKomputer::printNotebook() 
{ 
    cout<<notebook[1][3]<<endl; 
    cout<<notebook[2][3]<<endl; 
} 

int main() 
{ 
    tokoKomputer run; 
    run.printNotebook; 
} 

, но, если я скомпилировать UBUNTU терминал код всегда дают мне сообщения

coba.cpp:33:18: error: invalid types ‘<unresolved overloaded function type>[int]’ for array subscript 
coba.cpp:34:18: error: invalid types ‘<unresolved overloaded function type>[int]’ for array subscript 

какие ошибки? пожалуйста, дайте мне удар в разрешил коду

ТНХ

+0

'ноутбук [] [8]' должен быть членом класса, его локальными по отношению к функции вы определили в –

+0

Почему вы думаете, что вы должны быть в состоянии получить доступ к этому массиву? Он локален для совершенно другой функции. Я предлагаю вам сделать его статическим членом. (статические, как кажется, жестко закодированные, чтобы всегда содержать одни и те же значения). – BoBTFish

ответ

2

строки ноутбук [] [8] является локальным для вашего метода, вам необходимо либо пройти вокруг ссылки или просто частный ноутбук [] [] переменной для вашего класса.

notebook[1][3] 
notebook[2][3] 

выше не определены в пределах объема printNotebook, как

string notebook[][8] 

выходит из области видимости после записной книжки() метод заканчивается.

Edit: убедитесь, что вы переименовать его, как вы не можете иметь метод и переменной члена с таким же именем

Edit снова: вот некоторые примеры кода, чтобы получить ваш пример на это ноги, это, вероятно, НЕ Самый простой или лучший способ сделать это на всех, но он делает компилировать и работать.

#include <iostream> 
#include <string> 
using namespace std; 

class tokoKomputer 
{ 
    public: 
     void notebook(); 
     void printNotebook(); 
     string myNotebook[4][8]; 
}; 

void tokoKomputer::notebook() 
{ 
    string myTempNotebook[4][8] = { 
     {"MERK", "NO SERI", "HARGA", "STOK", "MEMORY", "HDD", "GPU", "DISPLAY"}, 
     {"Asus", "ASN0002", "2500000", "9", "1GB", "250GB", "128MB", "10"}, 
     {"Fujitsu", "FJN0001", "5500000", "12", "1GB", "320GB", "256MB", "14"}, 
     {"Fujitsu", "FJN0005", "6500000", "4", "4GB", "250GB", "1GB", "14"} 
    }; // This syntax will only work for initializing an array, not setting it later 

    for (int i = 0; i <= 3; i++) 
    { 
     for (int j = 0; j <= 7; j++) 
     { 
      myNotebook[i][j] = myTempNotebook[i][j]; 
     } 
    } 

}; 

void tokoKomputer::printNotebook() 
{ 
    cout << myNotebook[1][3] << endl; 
    cout << myNotebook[2][3] << endl; 
}; 

int main() 
{ 
    tokoKomputer run; 
    run.notebook(); 
    run.printNotebook(); 
    string hello; 
    cin >> hello; // this was just here to keep console open 
}; 
+0

, кстати, это вызовет столкновение имен. –

+0

В функции члена C++ и элемента данных в том же пространстве имен. –

+0

Да, забыл упомянуть, что вы захотите рассмотреть другое соглашение об именах. – Josh

Смежные вопросы