Многомерный массив (С++)

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

Мой указатель на указатель - это объект класса:

classType **ClassObject;

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

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?

person user40120    schedule 12.04.2009    source источник
comment
вам нужно прочитать stackoverflow.com/editing-help и переформатировать свой вопрос, чтобы он был более удобочитаемым.   -  person lothar    schedule 12.04.2009


Ответы (3)



Хм, я не уверен, что вы хотите сделать (особенно новый *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

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

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

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

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

person v3.    schedule 12.04.2009

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

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

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

person Billy ONeal    schedule 12.04.2009
comment
Я пытаюсь передать 1 слово конструктору, который принимает параметр указателя константного символа. Я могу вызвать любую функцию, кроме этой. Наличие ClassObject[][].WhatIneed(cArray); не будет работать ClassObject[][].WhatIdontNeed(); работает - person user40120; 12.04.2009