在 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);
};
我在 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);
};