jDOG
jDOG

Reputation: 1201

Cannot call member function without object = C++

I am brushing up again and I am getting an error:

Cannot call member function without object.

I am calling like:

FxString text = table.GetEntry(obj->GetAlertTextID());
FxUChar outDescription1[ kCP_DEFAULT_STRING_LENGTH ];

IC_Utility::CP_StringToPString(text, &outDescription1[0] );

The line: IC_Utility::CP_StringToPString(text, &outDescription1[0] ); is getting the error

My function is:

void IC_Utility::CP_StringToPString( FxString& inString, FxUChar *outString)
{
}

I know it has to be something simple I am missing.

Upvotes: 15

Views: 60007

Answers (5)

ruslik
ruslik

Reputation: 14870

"static" is the right answer. or, you can pass it a NULL "this" pointer if it's not used in the function:

((IC_Utility*)NULL)->CP_StringToPString(...);

Upvotes: -3

Gianni
Gianni

Reputation: 4390

You have to declare the function with the 'static' keyword:

class IC_Utility {
    static void CP_StringToPString( FxString& inString, FxUChar *outString);

Upvotes: 3

Tim Robinson
Tim Robinson

Reputation: 54734

If you've written the CP_StringToPString function, you need to declare it static:

static void IC_Utility::CP_StringToPString( FxString& inString, FxUChar *outString)

Alternatively, if it's a function in third-party code, you need to declare an IC_Utility object to call it on:

IC_Utility u;
u.CP_StringToPString(text, &outDescription1[0] );

Upvotes: 23

Blair Conrad
Blair Conrad

Reputation: 241790

Your method isn't static, and so it must be called from an instance (sort of like the error is saying). If your method doesn't require access to any other instance variables or methods, you probably just want to declare it static. Otherwise, you'll have to obtain the correct instance and execute the method on that instance.

Upvotes: 10

Kristopher Johnson
Kristopher Johnson

Reputation: 82535

You need to declare the function static in your class declaration. e.g.

class IC_Utility {
   // ...

   static void CP_StringToPString(FxString& inString, FxUChar *outString);

   // ...
};

Upvotes: 1

Related Questions