|
I don't know how you'd do that. You need an object to access an object's members.
Nesting a class affects its scope, but not member access.
Functionoids can have constructor though, so an object can be passed:
class Functionoid
{
public:
virtual void go() = 0;
};
class Foo
{
public:
void MainProc();
bool var;
class func1 : public Functionoid
{
Foo &foo;
public:
func1(Foo &fooref) : foo(fooref) {}
virtual void go();
};
};
void Foo::func1::go()
{
if (foo.var)
{
}
}
void Foo::MainProc()
{
Functionoid* pf1 = new func1(*this);
pf1->go();
delete pf1;
}
|
|
|
|
|
That did it!
I'm new enough to C++ to be not-quite-sure what's going on with the "&foo" and " : foo(fooref)" business, but ignorance forces a pursuit of knowledge, so off to the old textbooks I go.
I'll be smarter tomorrow. Thanks!
|
|
|
|
|
quasinormalized wrote: not-quite-sure what's going on with the "&foo" and " : foo(fooref)" business
Since an object is required to have members to access, I chose to pass an object reference.
It could have been a pointer as well.
Warning:
With this method, if the Foo object referenced by the Foo::func1 member (Foo::func1::foo) goes
out of scope or is deleted, then subsequent calls to the go() method will fail if go() trys to
use foo.
In other words, it's up to you to track the lifetime of all objects involved
|
|
|
|
|
hi
i want to convert
String^ abc = "Hello world"
to
char *
or
char []
any idea how to do it?
|
|
|
|
|
|
|
I need help with some homework. I had to write a program that would convert a number entered by the user into another base between 2-10. For example 1014 base 10 to base 8 = 1766. My program seems to convert some bases correctly both other it gives me the wrong answer and i cant figure it out. Also i set a while loop that makes the user enter a base number between 2-10, if they dont it keeps asking them until they do. What happens is if you still enter a number between 2-10 say 8 it will still ask you to enter a number between 2-8 and if you enter 8 again it will work.
thanks for your help.
#include <iostream>
#include <cmath>
using namespace std;
int main ()
{
// Variables
int num, base, p=2, d, m;
// User input
cout << "Please enter your number: ";
cin >> num;
// Number less than Zero
while (num <= 0)
{
cout << "Please enter a number greater than zero: ";
cin >> num;
}
cout << "Please enter the base number you would like to convert your number to: ";
cin >> base;
// Base between 2-10
while (base != 2, base != 3, base != 4, base != 5, base != 6, base != 7, base != 8, base != 9, base != 10)
{
cout << "Please enter a base number between 2-10: ";
cin >> base;
m=(int)pow((double)base,(double)p);
// Calculations
if (m > num)
{
p--;
m=(int)pow((double)base,(double)p);
}
else
{
p++;
m=(int)pow((double)base,(double)p);
}
while (p >= 0)
{
d=num/m;
cout << d;
num=num%m;
m=m/base;
p--;
}
cout << endl;
return 0;
}
}
|
|
|
|
|
chipper3344 wrote: while (base != 2, base != 3, base != 4, base != 5, base != 6, base != 7, base != 8, base != 9, base != 10)
I don't know what you are trying to do there but it is wrong. You should separate the different conditions by an AND: while (base!=2 && base!=3 && ...
By the way, something a little bit cleaner would be to check if your number is outside the boundaries (no check every possible case):
while (base<2 || base base>10) (it will continue looping if base is strictly less than 2 OR strictly bigger than 10). But I suppose you want to do the opposite ?
For the rest, I didn't look too much in details.
|
|
|
|
|
While using Visual Studio 2005 to built a MFC C++ application, when I create a Control Variable on a dialog it takes about 5 minutes.
However if I disconnect from our network it works as normal; i.e no long wait.
I have reset all reference to network drives to local drives, does anyone know what is causing this.
It looks like a network timeout, but I dont know the item that its looking for on the network whn creating a ctontrol variable.
Many thanks,
Andy.
|
|
|
|
|
Do your VS2005 default #include or lib paths point to network drives?
/ravi
|
|
|
|
|
No, I don't think so.
If I move the project onto a PC which is not connected to the network as is fine.
I have opted for everything on C:\.
Does that help.
|
|
|
|
|
What about a network drive in your system PATH?
|
|
|
|
|
Just did a check and NO, no ddrives other than C:
Andy.
|
|
|
|
|
I'm learning c++ and using visual studio c++ 2005 express edition. I had written a lot of program's code and try to run, and when it should be started I got an error : An unhandled exception of type 'System.NullReferenceException' occurred in System.Windows.Forms.dll Additional information: Object reference not set to an instance of an object.
What must I do, that this error disapear ???
|
|
|
|
|
You must be new if you're a stranger to the NullReferenceException!
For .NET-related question there's at least two other message boards here that will be more
helpful:
(Managed) C++/CLI[^]
.NET Framework[^]
|
|
|
|
|
I looked (Managed) C++/CLI and .NET Framework, I used search and found nothing about NullReferenceException! Do you know something about it??
|
|
|
|
|
I meant ask your question on one of those message boards - C++/CLI is probably the most
appropriate since this isn't a framework question
The NullReferenceException class' name says it all - it's the exception thrown when you try to
dereference a null reference.
NullReferenceException Class[^]
It should be clear in the debugger which line of your code is using a reference that
hasn't been initialized/allocated yet. You may have to view the call stack to find the line in
your code (when the exception occurs).
|
|
|
|
|
debugger shows, taht tihs error comes at this code :
this->b_em.pct->Load("b_em.jpg");<br />
this->b_em.pct->Location = System::Drawing::Point(13, 64);<br />
this->b_em.pct->Size = System::Drawing::Size(5, 5);<br />
this->b_em.pct->TabIndex = 3;<br />
this->b_em.pct->TabStop = false;<br />
this->b_em.pct->Visible = false;
so where is probelm ?
|
|
|
|
|
Unfortunately I have never used forms with .NET. There's many helpful people on the .NET boards
that have though
I have no idea what class your "this->b_em.pct" object is so, based on what I see, the only
guess I can make is the Load() method call is failing - is the b_em.jpg file in the app exe folder
or in the system path?
Mark
|
|
|
|
|
b_em is from structure
ref struct tank {<br />
int step_x, step_y; <br />
System::Windows::Forms::PictureBox^ pct;<br />
};
b_em.jpg is at app exe folder
that code is at void InitializeComponent(void) function
|
|
|
|
|
Dear thesad
if you ask on the correct forum(Managed C++/CLI) you can find your answer early
|
|
|
|
|
Ok. I'll take another wild guess - pct is NULL.
Maybe try
//System::Windows::Forms::PictureBox^ pct = gcnew System::Windows::Forms::PictureBox();
b_em.pct = gcnew System::Windows::Forms::PictureBox();
b_em.pct->Load(...
You can save yourself lots of typing by omitting the implied "this->"
|
|
|
|
|
many thanks Mark, it really help
|
|
|
|
|
You are welcome
Really, consider the C++/CLI board for future CLI-related questions. I get so confused trying to
think in .NET when I'm on the C++ board.
Cheers!
Mark "flailing in the dark" Salsbery
|
|
|
|
|
Your first step should be to set a breakpoint with the debugger ( F9 ) and examine your code to see which line blows up, then check to see what variable is null, causing the error. Everything else, is flailing in the dark.
Christian Graus - Microsoft MVP - C++
Metal Musings - Rex and my new metal blog
|
|
|
|