Re: Address of static method
Thorsten Kiefer wrote:
mlimber wrote:
Thorsten Kiefer wrote:
Hi,
my compiler tells me that the address of a static method will always
evaluate to true (which is 1). Why that ? How can i get the address of a
static method ?
I'm using gcc3.
It should only evaluate to true if you are testing it. Otherwise it
should simply be a non-zero address. Please post a minimal but complete
sample of code that demonstrates the problem (cf.
http://parashift.com/c++-faq-lite/how-to-post.html#faq-5.8).
Cheers! --M
thread.hpp :
#include <pthread.h>
#include <iostream>
namespace std {
class Thread {
protected:
pthread_t pthread;
static void *start_routine(void *x);
static void test() {};
public:
Thread(){
cout << &start_routine << endl;
cout << &test << endl;
int r = pthread_create(&pthread,0,start_routine,this);
}
virtual int run() = 0;
};
}
threadtest.cpp :
#include <thread.hpp>
#include <iostream>
using namespace std;
class Thread1 : public Thread {
public:
int run() {
for(int i = 0;i < 10;++i)
cout << i << endl;
}
};
int main(int argc,char **argv){
Thread1 t1;
}
Result:
1
1
Segmentation fault
Greets
tk
This is neither a minimal nor a complete program -- the pthread
business is non-standard and unnecessary here to demonstrate your
problem, and you don't define Thread::start_routine() anywhere. Also,
you didn't tell us where the warning message was issued, but I checked,
and it's on each of the couts in Thread::Thread(). Before I get to
that, however, you may not add things to the std namespace, so get
Thread out of there. Anyway, it looks like that's a bug in g++ 3. It
doesn't happen on VC++ 6, 2003 (online), 2005, EDG (online) or Comeau
(online). Better ask in a gnu group. See this FAQ for some
possibilities:
http://www.parashift.com/c++-faq-lite/how-to-post.html#faq-5.9
Cheers! --M