在 C++ 单元测试中编译 C 项目的问题

problem with compiling C project in a C++ unit test

我在 C 中有如下结构前向声明 我添加了 googletest 并想使用来测试我的代码 我在我的 test.cpp 文件中添加了 extern "C" 但我得到了错误

baseCommand.h 文件

typedef struct Command_t Command_t;

struct Command_t{

    uint8_t id;
    uint8_t procId;
    uint8_t priority;
    char initCommand[50];
    char command[50]; 
    char commandParam[450];
    char finishParam[10];
    int32_t (*fpInit)(struct Command_t* this);
    uint16_t initDelayMs;
    int32_t (*fpSend)(struct Command_t* this);
    uint16_t sendDelayMs;
    int32_t (*fpReceive)(struct Command_t* this);
    char expectedAnswerOnSucessCommand[100];
    char expectedAnswerOnError[100];
    uint16_t receiveDelayMs;
    int32_t (*fpProc)(struct Command_t* this);
    int8_t retry;
    void (*fpReset)(void);
    int port;
    int32_t (*fpCtor)(struct Command_t* this);
};

test.cpp 文件

extern "C" {

#include "commands/baseCommand.h"


}

# include "gtest/gtest.h"


TEST(IntegerFunctionTest, negative) {
    
        EXPECT_EQ(1, 1);

}

但是我得到了错误(更新后我删除了一些不相关的文件)

expected ',' or '...' before 'this' baseCommand.h

在线

int32_t (fpInit)(struct Command_t this);

这里:

int32_t (*fpInit)(struct Command_t* this);

您收到错误消息是因为 this 是 C++ 中的关键字,因此不能用作标识符。您需要将名称更改为其他名称。

请检查下面的代码,对于 q,“我向前声明 Command_t 在自身内部使用它的指针 - 啊 28 分钟前禁止”

    typedef struct Command_t * Command_tp;

    struct Command_t {

        uint8_t id;
        uint8_t procId;
        uint8_t priority;
        char initCommand[50];
        char command[50];
        char commandParam[450];
        char finishParam[10];
        //int32_t (*fpInit)(struct Command_t* this);
        int32_t (*fpInit)(Command_tp);
        uint16_t initDelayMs;
        //int32_t (*fpSend)(struct Command_t* this);
        int32_t (*fpSend)(Command_tp);
        uint16_t sendDelayMs;
        //int32_t (*fpReceive)(struct Command_t* this);
        int32_t (*fpReceive)(Command_tp);
        char expectedAnswerOnSucessCommand[100];
        char expectedAnswerOnError[100];
        uint16_t receiveDelayMs;
        //int32_t (*fpProc)(struct Command_t* this);
        int32_t (*fpProc)(Command_tp);
        int8_t retry;
        void (*fpReset)(void);
        int port;
        //int32_t (*fpCtor)(struct Command_t* this);
        int32_t (*fpCtor)(Command_tp);
    };