Ошибка с классами, использующими 2-D Массивы в C ++

0

Я пишу код для отображения массива из файла, все это делается в проекте с файлом.hp файла.hpp и основным файлом. однако мой заголовочный файл продолжает давать мне ошибку redefiniton "токена класса" и ценное определение "токена класса", но я не очень уверен, как переопределить его. Спасибо за помощь

main.cpp

using namespace std;
int main()
{
string filename;
int b;
int d;
int i;
int j;
token matrix[30][30];

cout << "Type the name of text file: e.g. 'File.txt'" << endl;
getline( cin, filename );//This could also be cin >> name//
matrix[30][30].setassign( filename );

    cout << endl ;

system("pause") ;

}


token.h
// header file token.h

using namespace std;

class token
{
private:
string assignmat;
//char displaymat;
//char displaytoken;

public:
// Constructors
token();
token( string );
//token( string, char, char );
// Public functions
void setassign( string );
//void setdisplay( char );
//void settoken( char );


};'

token.cpp

using namespace std;

// constructor 1 
token::token()
{

assignmat = " ";
//displaymat = ' ';
//displaytoken = ' ';
}
// constructor 2 parameterised constructor
token::token( string assignmat1) //, int displaymat1, char displaytoken1 )
{
assignmat = assignmat1;
//displaymat = displaymat1;
//displaytoken = displaytoken1;
}
// public function setName
void student::setassign( string filename )
{
char matrix[30][30];
ifstream inputFile;
int i,j;
inputFile.open(filename.c_str());

for(i = 0; i < b; i++)
{
    for(j = 0; j < d; j++)
    {

        inputFile.get(matrix[i][j]); 

        if(matrix[i][j] == ',' || matrix[i][j] == '\n') // for some reason if i dont include the                          \n it doesnt work, but it should because the row ends at 30
        {   //if loop to get rid of commas by deducting the counter by 1, hence replacing the comma with the next value

            j-- ;       



        }
    }

}
    cout << endl;

for(i = 0; i < b; i++){         // display
    for(j = 0; j < d; j++){

        cout << " " << matrix[i][j] ;


    }

    cout << endl ;
}

}

извините, но я новичок в этом форуме и не знаю, как его использовать, я также включил файлы заголовков в свой основной файл и файл.cpp

Теги:

1 ответ

0

на линии

 matrix[30][30].setassign( filename );

вы пытаетесь ссылаться на элемент в 2D-массиве, который выходит за рамки. Элементы, которые вы можете использовать, находятся в матрице диапазона [0] [0] вплоть до матрицы [29] [29]. матрица [30] [30] выходит за пределы.

помните в C++, когда вы выделяете массив из 10, например, первый элемент имеет индекс 0, последний (или десятый элемент) находится в индексе 9.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню