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

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

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

Beitrag 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.
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

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

Beitrag 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.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

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

Beitrag 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".
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

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

Beitrag von Krishty »

In C++03 ist es wirklich ein Problem, ja. So waren eben die Regeln.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Antworten