定义enum 在多个文件类中使用,编译报错

yuanzhenhai 2014-09-19 10:36:03
如题:
我在main.h中定义了

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>

#include <iostream>
#include <string>
using namespace std;
using std::string;

#include "file1.h"
#include "file2.h"

typedef enum _SOURCESTREAM_STATE
{
SOURCESTREAM_INVALID = -1,
SOURCESTREAM_INIT = 0,
SOURCESTREAM_START = 1,
SOURCESTREAM_STOP = 2,
}SOURCESTREAM_STATE;


在file1.h中声明函数如下:

#include "main.h"
void file1_funtion(SOURCESTREAM_STATE state);


在file1.cpp中定义函数如下:

#include "file1.h"
void file1_funtion(SOURCESTREAM_STATE state)
{
if (state == SOURCESTREAM_START)
{
printf("[%s][%d][%s]\n", __FILE__, __LINE__, __func__);
}
}


file2.h file2.cpp与file1.h file2.cpp差不多,只是函数名不一样, 编译报错如下:
realtimedsp@realtimedsp-desktop:~/test/2014_test/enum$ make
g++ -c -g -DDEBUG -lpthread file1.cpp
In file included from main.h:16:0,
from file1.h:5,
from file1.cpp:3:
file2.h:7:20: error: variable or field ‘file2_funtion’ declared void
file2.h:7:20: error: ‘SOURCESTREAM_STATE’ was not declared in this scope
make: *** [file1.o] Error 1

请多多指教!!
...全文
528 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanzhenhai 2014-09-19
  • 打赏
  • 举报
回复
感谢brookmill,是include问题
brookmill 2014-09-19
  • 打赏
  • 举报
回复
能不能把main.h里面这两行删掉 #include "file1.h" #include "file2.h"
brookmill 2014-09-19
  • 打赏
  • 举报
回复
main.h和file1.h互相include?这可不太好吧
yuanzhenhai 2014-09-19
  • 打赏
  • 举报
回复
本来是有类的,但是在没类也报错是,所以应该与类无关,Makefile如下: TARGET = $(notdir $(CURDIR)) #TARGET = test CC = g++ #CC = /opt/arm-2009q1/bin/arm-none-linux-gnueabi-gcc PATH1 = /usr/local #PATH1 = /usr/local_arm USER_LIB = $(PATH1)/lib USER_INCLUDE = $(PATH1)/include INCLUDE = -I $(USER_INCLUDE) ##INCLUDE += -I /usr/include/c++/4.6 LIB = -L $(USER_LIB) ##LIB += -L /usr/lib64 C_FLAGS = -g -DDEBUG -lpthread RM = rm SOURCES = $(wildcard *.cpp) HEADERS = $(wildcard *.h) OBJFILES = $(SOURCES:%.cpp=%.o) # stdsoap2.o SERVER_OBJS = $(OBJFILES) .PHONY: clean all: $(TARGET) $(TARGET): $(SERVER_OBJS) $(CC) -o $(TARGET) $(SERVER_OBJS) $(INCLUDE) $(LIB) $(C_FLAGS) %.o: %.cpp $(CC) -c $(C_FLAGS) $< clean: @echo Removing generated files.. rm -f *.o $(TARGET) $(OBJFILES) *.log

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧