小编kin*_*kin的帖子

C++代码链接出错:警告C4190:type指定了C-linkage,但返回与C不兼容的UDT

我很难理解为什么以下代码(带有标准布局的UDT)在visual C++ 2012中给出了C-linkage警告:

warning C4190: 'vec3_add' has C-linkage specified, but returns UDT 'vec3' which is incompatible with C



typedef struct vec3 {
    float   x;
    float   y;
    float   z;
#ifdef __cplusplus
    vec3(float x, float y, float z) : x(x), y(y), z(z) {}
#endif
} vec3;

#ifdef __cplusplus
extern "C" {
#endif
vec3    vec3_add(vec3 a, vec3 b);
#ifdef __cplusplus
}
Run Code Online (Sandbox Code Playgroud)

函数的定义在C++文件中:

vec3
vec3_add(vec3 a, vec3 b) {
    static_assert(std::is_standard_layout<vec3>::value == true, "incompatible vec3 type");
    return vec3(a.x + b.x, a.y + b.y, a.z + …
Run Code Online (Sandbox Code Playgroud)

c c++ dll

6
推荐指数
2
解决办法
7103
查看次数

标签 统计

c ×1

c++ ×1

dll ×1