#include "canthread.h"
#include "communication/uartandcanshare.h"
#include <sys/socket.h>
#include <linux/can.h>//对应头文件
#include <net/if.h>
#include <sys/ioctl.h>
#include <linux/can/raw.h>
#include <errno.h>
#include <getopt.h>
#include <unistd.h>
#define BUF_SIZ (255)
#define myerr(str) fprintf(stderr, "%s, %s, %d: %s\n", __FILE__, __func__, __LINE__, str)
canThread *canThread::m_canthread = NULL;
canThread::canThread(QObject *parent):
QThread(parent)
{
#if 1
struct sockaddr_can addr; //此处报错
struct ifreq ifr;
int canfd;
canfd = socket(PF_CAN, SOCK_RAW, CAN_RAW);
if(canfd == -1)
{
perror("Socket failed");
exit(1);
}
...
}
报错内容:
/opt/code/Bartack/src/communication/canthread.cpp:26: error: aggregate 'canThread::canThread(QObject*)::sockaddr_can addr' has incomplete type and cannot be defined
struct sockaddr_can addr;
^
头文件已经包含了,实在想不出为什么会这样,求助,求助,求助
类型不完整,不能定义结构;
#include int main () {
/* 定义不完整结构类型 /
struct user;
/ 可以定义指向不完整结构类型的指针 /
struct user *p;
/ 补充结构定义 /
struct user { char *name; int age; };
/ 只有完整的结构类型可以定义变量 /
struct user qifei; qifei.name = "qifei"; qifei.age = 28;
p = &qifei; printf("user name:%s/n", p->name);
printf("user age :%d/n", p->age); return 0; }
*参考下**
问题更新
我把能去掉的都去掉了
#include "canthread.h"
#include <linux/can.h>
canThread *canThread::m_canthread = NULL;
canThread::canThread(QObject *parent): QThread(parent)
{
struct sockaddr_can addr; //sockaddr_can 能跳转到头文件<linux/can.h>中的定义
}
现在还是报错,但可以跳转到定义
添加一个STD命名空间试试
类型定义不完整,你是在自己类型的定义中添加了一个本类型的指针吗?
类型不完整,不能定义结构;
#include int main () {
/* 定义不完整结构类型 /
struct user;
/ 可以定义指向不完整结构类型的指针 /
struct user p;
/ 补充结构定义 /
struct user { char *name; int age; };
/ 只有完整的结构类型可以定义变量 /
struct user qifei; qifei.name = "qifei"; qifei.age = 28;
p = &qifei; printf("user name:%s/n", p->name);
printf("user age :%d/n", p->age); return 0; }
*参考下*
谢谢各位,我把这个文件删除,重新建立了一个,添加进工程,问题解决了