C++ 如何使用.c文件而不是.cpp文件在google test中编写测试类?
我已经在我的Android NDK项目contain.c文件中使用了googletest。我使用了一个.cpp类型的测试类来做同样的事情。我想改用.c文件。当我尝试使用它时,出现以下错误:C++ 如何使用.c文件而不是.cpp文件在google test中编写测试类?,c++,c,unit-testing,googletest,C++,C,Unit Testing,Googletest,我已经在我的Android NDK项目contain.c文件中使用了googletest。我使用了一个.cpp类型的测试类来做同样的事情。我想改用.c文件。当我尝试使用它时,出现以下错误: Running main() from gtest_main.cc [==========] Running 0 tests from 0 test cases. [==========] 0 tests from 0 test cases ran. (1 ms total) [ PASSED ] 0 t
Running main() from gtest_main.cc
[==========] Running 0 tests from 0 test cases.
[==========] 0 tests from 0 test cases ran. (1 ms total)
[ PASSED ] 0 tests.
如何解决这个问题?您不能使用.c文件而不是.cpp文件在googletest中编写测试类
.c文件应包含c语言源代码,c/c++编译器将假定.c文件
将被编译为C
文件应包含C++语言源代码,C/C++编译器将假设.cpp文件
是编译为C++ + < /p>
C和C++是相关的,但不同的编程语言。C比C++更古老和更简单。
C语言中没有类。包含类的C++源代码不能编译为C.<
C++编译器将处理某个HealthHealth.h,并且它可以正确地处理它 正如我们所知,some_header.h是一个C语言头文件。通知C++编译器,某个标题。h 是一个C头,您可以这样写:
extern "C" {
#include "some_header.h"
}
如果不将外部C{…}放在C语言头的include周围,则会得到未定义的符号
链接时的错误
我建议您尝试一个包含以下三个文件的项目:
返回1.h
返回1.c
测试返回1.cpp
使用googletest编译、链接并运行此项目
你可能会发现这个问题的答案很有帮助。我不明白。为什么您关心文件的扩展名是.c还是.cpp?为什么不直接使用一个能正确描述文件内容的版本呢?我遇到了某些编译问题,无法识别类型转换错误:无法转换'MyVersion{aka tagMYVersion}'对于参数'2'的'MyStatus',当我为项目单独运行ndk build/当我在.c文件而不是.cpp中编译源代码时,没有这样的编译问题,因此需要一种使用.c文件运行gtest的方法,因此它仅适用于我的部分c代码!当我尝试只包含头文件而不包含要测试的.c文件时,错误:对“\u FreeRetransmitterQueue”collect2:ld的未定义引用返回1退出状态make.exe:**[obj/local/armeabi/SmartTest]错误1当我包含.c文件时,我遇到某些无法识别类型转换的编译问题错误:无法将参数“2”的“MyVersion{aka tagMYVersion}”转换为“MyStatus”。当我包含.c文件时,我遇到某些无法识别类型转换的编译问题错误:无法转换“MyVersion{aka tagMYVersion}”'到参数'2'的'MyStatus',当我为项目单独运行ndk build/当我在.c文件中编译源代码而不是在其他文件中编译源代码时,没有此类编译问题。cpp@user3054298对不起,我不明白你想说什么。如果您发布了.c.file和编译器命令行,可能会产生错误。我面临的问题是C++编译器中没有识别隐式类型转换。所以我必须修改我的.c文件,并使用显式类型的浇铸。有没有办法在不改变源代码的情况下解决这个问题?谢谢你的帮助
// return_one.h
#ifndef RETURN_ONE_H
#define RETURN_ONE_H
// A C library :)
// A C function that always return 1.
extern int return_one(void);
#endif
// return_one.c
#include "return_one.h"
int return_one(void)
{
return 1;
}
// test_return_one.cpp
#include "gtest/gtest.h"
extern "C" {
#include "return_one.h"
}
TEST(t_return_one, returns_1)
{
EXPECT_EQ(1,return_one());
}
int main(int argc, char **argv)
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}