此问题在此处已有答案:
QT No such file or dictionary when I try to include a header file(2个答案)
去年关闭了。
简介:
我在Qt框架中有一个C++项目,最近我用纯C99代码创建了一个CAN-bus SAE J1939 library。这个库运行得非常好。现在我将把这个库导入到我的Qt Creator Qt项目中。
- 注意 *:编译器为MinGW 5.15.2
方法:
我已经通过在我的 .pro 项目文件中包含行,在带有Qt框架的C++中包含了 .h 文件。
include(ThirdLibrary/OpenSAEJ1939/OpenSAEJ1939.pri)
在OpenSAEJ1939.pri
文件中,它被写入
INCLUDEPATH += $$PWD
下面是我的项目文件夹:
路径ThirdLibrary/OpenSAEJ1939/Open_SAE_J1939/
因此,当我创建一个C++源文件,然后添加C源函数时,我得到了 * 对Open_SAE_J1939_Listen_For_Messages* 的未定义引用。
#include "Can_Bus_Listen_Thread.h"
CAN_Bus_Listen_Thread::CAN_Bus_Listen_Thread(J1939* j1939, bool* usbMessageAvailable, bool* startCANBusListenThread){
this->j1939 = j1939;
this->usbMessageAvailable = usbMessageAvailable;
this->startCANBusListenThread = startCANBusListenThread;
}
void CAN_Bus_Listen_Thread::run(){
while(1){
if(*this->startCANBusListenThread && *this->usbMessageAvailable)
Open_SAE_J1939_Listen_For_Messages(this->j1939);
msleep(1);
}
}
我查看C++头文件 Can_Bus_Listen_Thread.h,可以看到我已经从 ThirdLibrary/OpenSAEJ 1939/Open_SAE_J1939/ 导入了C头文件。
#ifndef CAN_BUS_LISTEN_THREAD_H
#define CAN_BUS_LISTEN_THREAD_H
#include <QThread>
#include <QtSerialPort>
#include "ThirdLibrary/OpenSAEJ1939/Open_SAE_J1939/Open_SAE_J1939.h"
class CAN_Bus_Listen_Thread : public QThread {
public:
CAN_Bus_Listen_Thread(J1939* j1939, bool* usbMessageAvailable, bool* startCANBusListenThread);
private:
J1939* j1939;
bool* startCANBusListenThread;
bool* usbMessageAvailable;
void run();
};
#endif // CAN_BUS_LISTEN_THREAD_H
我已经成功地包含了C
头文件,但是这些头文件找不到C
源文件。是的,Open_SAE_J1939_Listen_For_Messages
被extern "C" { }
包围在Open_SAE_J1939.h中。
我忘了什么吗?C++应该能够读取C源文件,如果它们周围有extern "C" { }
#ifndef OPEN_SAE_J1939_OPEN_SAE_J1939_H_
#define OPEN_SAE_J1939_OPEN_SAE_J1939_H_
/* Layers */
#include "../Open_SAE_J1939/Structs.h"
#include "../SAE_J1939/SAE_J1939-71_Application_Layer/Application_Layer.h"
#include "../SAE_J1939/SAE_J1939-73_Diagnostics_Layer/Diagnostics_Layer.h"
#include "../SAE_J1939/SAE_J1939-81_Network_Management_Layer/Network_Management_Layer.h"
#ifdef __cplusplus
extern "C" {
#endif
/* This functions must be called all the time, or be placed inside an interrupt listener */
void Open_SAE_J1939_Listen_For_Messages(J1939 *j1939);
#ifdef __cplusplus
}
#endif
#endif /* OPEN_SAE_J1939_OPEN_SAE_J1939_H_ */
1条答案
按热度按时间juud5qan1#
这就是解决方案。
1.右键单击Qt中项目。
1.选择“添加现有词典”
1.标记您要导入的词典。现在您可以在
.pro
文件中看到许多.c
和.h
文件。提示:不要使用
../../
。这可能会导致问题。请改用项目路径,例如:您不需要
.pri
文件。请删除它。