相关疑难解决方法(0)

混合类和结构

我很清楚类和结构之间区别,但是我很难权威地说这是否定义得很好:

// declare foo (struct)
struct foo;

// define foo (class)
class foo {
};

// instance of foo, claiming to be a struct again! Well defined?
struct foo bar;

// mixing class and struct like this upsets at least one compiler (names are mangled differently)
const foo& test() {
   return bar;
}

int main() {
   test();
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果这是未定义的行为,有人可以指向权威(即ISO的章节和经文)参考的方向吗?

处理这个问题的编译器(Carbide 2.7)相对较旧,我尝试过的所有其他编译器对此都非常满意,但显然没有任何证据.

我的直觉是这应该是未定义的行为,但我找不到任何证实这一点,我很惊讶没有GCC版本或Comeau这么多警告它.

c++ struct class undefined-behavior

17
推荐指数
2
解决办法
2951
查看次数

对于C++类的不透明C指针,正确的typedef是什么?

有几十个SO问题和博客文章描述了用C API包装C++类.示例为C消耗包装C++类API

大多数这些答案和博客文章都是这样的:

typedef void* CMyClass;
Run Code Online (Sandbox Code Playgroud)

但其他人说这很糟糕,因为它没有提供类型安全.他们提出了不透明结构的各种变化,没有任何解释.我可以复制上面的片段并继续我的生活(我会在此期间做),但我想知道一劳永逸

  • 哪种形式最好?
  • 它提供哪些保证void*
  • 它是如何工作的?

c c++ typedef

12
推荐指数
2
解决办法
1476
查看次数

VS 2013上的LNK2001(MSVC 18)但VS 2015上没有(MSVC 19)

我正在使用早期版本的Cocos2dx来编写游戏并使用VS 2013进行编译.请注意,我正在使用CMake和Qt Creator两种编译器版本.当Cocos2dx v3.12问世时,我决定在我的游戏中将lib升级到该版本并开始使用VS 2015.然后我开始收到此错误:

QCardManager.cpp.obj:-1:错误:LNK2001:未解析的外部符号"public:static class QCard*__cdecl QCard :: create(enum PLAYER,struct Question const*,enum CARD_TYPE,int const&)"(?create @ QCard @@ SAPAV1 @ W4PLAYER @@ PBUQuestion @@ W4CARD_TYPE @@ ABH @ Z)

当我使用VS 2013时,我没有得到那个错误.经过几个小时的调试后我发现了原因.

这是粗略的贬值QCard:

#include "2d/CCSprite.h"
#include "CommonVariables.h"

class RandomPostureSprite;
class Question;
namespace cocos2d
{
class Label;
}

enum class CARD_TYPE {
    QUESTION,
    OPTION
};

class QCard : public cocos2d::Sprite
{
public:
    static QCard *create(PLAYER player, const Question *question, CARD_TYPE type, const int &index);
}
Run Code Online (Sandbox Code Playgroud)

我在QCard.cpp文件中正确实现了该功能,并且该文件也正确地添加到了项目中.所以问题是class …

c++ visual-c++

3
推荐指数
1
解决办法
202
查看次数

标签 统计

c++ ×3

c ×1

class ×1

struct ×1

typedef ×1

undefined-behavior ×1

visual-c++ ×1