0

I'm trying to store a pointer in an array.

My pointer to a pointer is class object is:

classType **ClassObject;

So i know i can allocate it by using the new operator like this:

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

I'm reading a text file, with punctuation and here is what i have so far:

// 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.

I guess my questions are:

  • Have I allocated space for each word in the file?
  • How would i store a pointer in the ClassObject array within my while/for loop?
1

3 Answers 3

3

If you are using C++ use the Boost Multidimensional Array Library

Sign up to request clarification or add additional context in comments.

1 Comment

And you should look at this question too : stackoverflow.com/questions/365782/…
1

Hmm, I'm not sure what you want to do (especially new *classType[x] -- does this even compile?)

If you want a new classType for every word, then you can just go

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

provided that ClassObject is initialized (as you said).

You say you want a 2D array - if you want to do that, then the syntax is:

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

However, I'm also not sure of what you mean by new *classType[ 100 ] = {}; - what are the curly braces doing there? It seems like it should be

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

I highly suggest you use something else, though, as this is really nasty (and you have to take care of deletion... ugh)

Use vector<>s or as the above poster suggested, the boost libraries.

Comments

0

Your code is perfectly fine excepting one line: ClassObject[x] = new *classType[x]; The star * needs to go away, and what you're probably trying to say is that you want ClassObject to be indexed to word count rather than x.

Replace that line with: ClassObject[wrdCount] = new classType[x];

Hope that helps, Billy3

1 Comment

Im trying to pass the 1 word to the constructor, which takes a const character pointer paramater. I can call every function except for that one. Having ClassObject[][].WhatIneed( cArray ); wont work ClassObject[][].WhatIdontNeed(); works

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.