Error: C2228: Left of '' Must Have Class/Struct/Union

Error: C2228: left of '' must have class/struct/union

You made an error here:

DatabaseControl myDBControl();

You declared a function called myDBControl taking no arguments and returning a DatabaseControl.

Object declarations without any constructor arguments must omit the ():

DatabaseControl myDBControl;

This is related to (but is not precisely) the "most vexing parse", in that it's caused by the same language rule that statements are function declarations if they can be so parsed.

Error C228: left of must have class/struct/union several times

Is Message included or defined before MessageSerializer?

Message is defined after, is it a problem?

Yes, that is a problem. Move the definition of Message to before MessageSerializer.

In simple terms; the C++ compiler requires to see a declaration (for pointers and references) or a definition (for values) of a type before it is used.

From the cppreference for declarations;

Declarations introduce (or re-introduce) names into the C++ program.

And for definitions;

Definitions are declarations that fully define the entity introduced by the declaration. Every declaration is a definition, except for the following... [list not applicable and redacted].

C++ using compare - Left of '.compare' must have class/struct/union

getName is a method.

change if(resourceArray[i].getName.compare(temp)){ to if(strcmp(resourceArray[i].getName(), temp) == 0){

error C2228 left of '.setDay' must have a class/struct/union

setDay is not static it needs to be called from an instance of the class, so you cannot call it like

DayOfYear::DayOfYear.setDay(d); 

Instead, you'd call it off of this

this->setDay(d);

which is implicitly what is called within a class method, so you can just drop the this->

setDay(d);

In fact, you do this correctly for "January", then incorrect in the latter months.

Left of . must have class/struct/union c++ error

. has higher precedence than *, so *fin.open(inputFilename, ios::in); (and others) are interpreted as *(fin.open(inputFilename, ios::in));, which is incorrect since fin is a pointer.

Use brackets or better yet, ->. Or even better, pass the parameters by reference, I don't see a need to pass by pointer.

C2228: left of '.Text' must have class/struct/union

The error message is telling you that the symbol to the left of . must be a class struct or union. If is none of those. Instead it is a handle to a managed type.

Your code should read

label->text = result;

error C2228: left of '.words' must have class/struct/union

You wrote

spectralFrameWord[0].words

but meant

spectralFrameWords[0].words

The compiler could not have made this much clearer. It said:

left of '.words' must have class/struct/union

So that tells you to inspect that which is to the left of words to see why it does not fit the bill.


When you allocate with new sometype[...] you must deallocate with delete[]. Using std::vector<T> might be more appropriate.

error C2228: left of '.ToString' must have class/struct/union

"error C2228: left of '.ToString' must have class/struct/union": enum class is also the syntax for a C++11 enum. To make it a C++/CLI enum, give it an accessibility specifier, which is not allowed on a C++11 enum. In other words, private enum class or public enum class will change it from a C++11 enum to a C++/CLI enum. This wasn't a problem in VS2010 because it doesn't support C++11 enums.

"The program can't start because MSVCR100D.dll is missing from your computer.": VS2012 uses a different C runtime than VS2010. MSVCR100D is the Microsoft Visual C Runtime version 10.0, Debug version. This DLL is installed with VS2010, there is no other way to get it. If you have an old Release build, you can get the runtime redistributable from Microsoft (x86 or x64), and install that to make it run. (That will be MSVCR100.dll, no "D" at the end.)



Related Topics



Leave a reply



Submit