Многомерный массив (C ++) - PullRequest
0 голосов
/ 12 апреля 2009

Я пытаюсь сохранить указатель в массиве.

Мой указатель на указатель является объектом класса:

classType **ClassObject;

Итак, я знаю, что могу выделить его с помощью оператора new, например:

ClassObject = new *classType[ 100 ] = {};

Я читаю текстовый файл с пунктуацией, и вот что у меня есть:

// included libraries
// main function
// defined varaibles

classType **ClassObject; // global object
const int NELEMENTS = 100; // global index


wrdCount = 1;  // start this at 1 for the 1st word
while ( !inFile.eof() )  
{
   getline( inFile, str, '\n' );  // read all data into a string varaible
   str = removePunct(str);  // User Defined Function to remove all punctuation.
   for ( unsigned x = 0; x < str.length(); x++ )
   {
       if ( str[x] == ' ' ) 
       {
          wrdCount++;  // Incrementing at each space
          ClassObject[x] = new *classType[x];
       // What i want to do here is allocate space for each word read from the file.

       }
   }
}
// this function just replaces all punctionation with a space
string removePunct(string &str) 
{ 
    for ( unsigned x = 0; x < str.length(); x++ )
        if ( ispunct( str[x] ) )
            str[x] = ' ';
  return str;
}

// Thats about it.

Я думаю, мои вопросы:

  • Я выделил место для каждого слова в файле?
  • Как мне сохранить указатель в массиве ClassObject внутри моего цикла while / for?

Ответы [ 3 ]

3 голосов
/ 12 апреля 2009

Если вы используете C ++, используйте библиотеку многомерных массивов Boost

1 голос
/ 12 апреля 2009

Хм, я не уверен, что вы хотите сделать (особенно новый * classType [x] - это даже компилируется?)

Если вы хотите новый classType для каждого слова, тогда вы можете просто пойти

ClassObject[x] = new classType; //create a _single_ classType
ClassObject[x]->doSomething();

при условии, что ClassObject инициализирован (как вы сказали).

Вы говорите, что хотите двумерный массив - если вы хотите это сделать, то синтаксис:

ClassObject[x] = new classType[y]; //create an array of classType of size y
ClassObject[0][0].doSomething(); //note that [] dereferences automatically

Однако я также не уверен, что вы подразумеваете под новым * classType [100] = {}; - что там делают фигурные скобки? Кажется, это должно быть

classType** classObject = new classType*[100];

Я настоятельно рекомендую вам использовать что-то еще, так как это действительно противно (и вы должны позаботиться об удалении ... тьфу)

Используйте vector <> s или, как предлагалось выше, предложены библиотеки повышения.

0 голосов
/ 12 апреля 2009

Ваш код в порядке, за исключением одной строки: ClassObject[x] = new *classType[x]; Звезду * нужно убрать, и вы, вероятно, пытаетесь сказать, что вы хотите, чтобы ClassObject индексировался в количество слов , а не в х.

Заменить эту строку на: ClassObject[wrdCount] = new classType[x];

Надеюсь, это поможет, Billy3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...