Seite 1 von 1

[C/C++] Function has C-linkage but returns UDT

Verfasst: 13.10.2013, 13:31
von Artificial Mind
Hallo Community,

ich habe hier eine ganze Reihe Warnings die ich gerne fixen anstatt ignorieren würde.

Vereinfach sieht der Code so aus:

Code: Alles auswählen

extern "C" 
{
struct vec2
{
  vec2(float _x, float _y) : x(_x), y(_y) {}
  float x, y;
}

__declspec(dllexport) vec2 __cdecl foo()
{
  return vec2(1, 2);
}
}
Die Warning die ich bekomme ist:

Code: Alles auswählen

warning C4190: 'foo' has C-linkage specified, but returns UDT 'vec2' which is incompatible with C
Einen leeren Konstruktor oder einen default Konstruktor für vec2 anzugeben hat leider nichts geändert.

Setup:
Windows 7
Visual Studio 2013 RC
x64 Release

Soweit ich das beurteilen kann funktioniert der Code aber (das wird als Interop zu Mono/.NET genutzt)

Cheers
Mind

EDIT: Meine Vermutung ist, dass ich durch die user-defined ctors nicht mehr POD bin.

Re: [C/C++] Function has C-linkage but returns UDT

Verfasst: 13.10.2013, 13:51
von Krishty
Artificial Mind hat geschrieben:Meine Vermutung ist, dass ich durch die user-defined ctors nicht mehr POD bin.
In C++03 nicht mehr; für C++11 müsste es AFAIK wieder hinkommen.

Re: [C/C++] Function has C-linkage but returns UDT

Verfasst: 13.10.2013, 13:56
von Artificial Mind
Also ich hab jetzt überall mal meine Konstruktoren rausgenommen und den Code angepasst und jetzt sind die Warnings weg. Ist das denn wirklich ein Problem? In dem Falle hab ich ja nur "plain data".

Re: [C/C++] Function has C-linkage but returns UDT

Verfasst: 13.10.2013, 14:30
von Krishty
In C++03 ist es wirklich ein Problem, ja. So waren eben die Regeln.