Hey guys, I taught myself PHP a few years back and am now in college and am relatively well versed in Java (and by that I really mean I’m a beginner but did my data structures course in it. I’ll be taking Algorithms next semester)
In any case…I want to learn C++ and stumbled upon this:
http://newdata.box.sk/bx/c/
What is really tripping me up right now is pointers…I THINK I get the theory but a really simple “program” isn’t running right. It compiles but then there’s a memory error.
I’ve decided to purchase C++ Primer after doing a few searches here on SO so it’ll get here on Friday. Until then, can anyone tell me what is (horribly) wrong with this simple code:
class Number {
public:
string *owner;
int getNum() {
return *num;
}
int getTwice() {
return *twice;
}
Number(int our_num, string me) {
*num = our_num;
*twice = 2 * *num;
*owner = me;
}
private:
int *num;
int *twice;
};
int main()
{
Number *nbr3 = new Number(3,"Bob");
cout << nbr3->getNum() << endl;
cout << nbr3->getTwice() << endl;
cout << nbr3->owner << endl;
delete nbr3;
system("PAUSE");
return 0;
}
The errors appear in the constructor…like the *num=our_num part.
But isn’t that line saying “set the value of the num pointer to our_num”? That IS what I want!
Thanks for helping with what I know to be a very silly and fundamental error…
You didn’t allocate memory locations to point to for
num, twice,owner. So, in your constructor –Since, the class is managing resources,
class Numbershould follow –Rule of ThreeEdit 1
Pointers are like any other variables but holds a memory address. Just declaring
int* ptr;doesn’t mean thatptris pointing a to valid memory location right away. You should assign/initialize it to where it should point to.So,
Hope it helps to an extent.