Reputation: 648
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:
Upvotes: 0
Views: 3607
Reputation: 106530
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
Upvotes: 0
Reputation: 2023
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.
Upvotes: 1