可以从.cpp文件中包含以下内容,编译器不会对此进行抱怨。

typedef struct _SomeName {
    char NameID[MaxSize];
    UserId notUsed;
    UserInstance instance;

    bool operator==(const struct _SomeName& rhs) const
    {
        return (strncmp(NameID, rhs.NameID, MaxSize) == 0);
    }
    bool operator!=(const struct _SomeName& rhs) const { return !(*this == rhs); };
} SomeName;

如何重写上面的内容,以便可以从.c文件中包含它?

最佳答案

到目前为止发布的其他解决方案存在一个问题,您不能在混合C和C++的项目中使用它。从你的问题的背景来看,我猜你可能想这么做。如果尝试这样做,可能会出现静默的未定义行为,因为该结构可能在不同的翻译单元中具有不同的布局。
我建议这个版本:

typedef struct
{
    char NameID[MaxSize];
    UserId notUsed;
    UserInstance instance;
} SomeName;

#ifdef __cplusplus
inline bool operator==( SomeName const &lhs, SomeName const &rhs )
{
     return strcmp(lhs.NameID, rhs.NameID) == 0;
}
inline bool operator!=( SomeName const &lhs, SomeName const &rhs )
{
     return !operator==( lhs, rhs );
}
#endif

关于c++ - C中的Struct编译器问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26266782/

10-14 05:28