【发布时间】:2015-05-20 18:27:19
【问题描述】:
我知道这个问题已经被问死了,但我已经做了相当多的研究,到目前为止没有任何帮助。是的,我有很多头守卫 不,据我所知,没有什么需要内联每个函数都在一个类中。我有一个encoderrunner.cpp,其中包含encoder.h 和decoder.h,encoder.h 和decoder.h 都包含FrequencyTable.h,这就是所有地狱都崩溃的地方,编译器说FrequencyTable 中的所有内容都是重新定义。这是其中之一,这恰好来自我从 FrequencyTable 中分离出来的类
/home/sersay/Documents/ECS60/p4/FrequencyNode.cpp:10: multiple definition of `FrequencyNode::FrequencyNode(unsigned char, FrequencyNode*, FrequencyNode*)'
decoder.o:/home/sersay/Documents/ECS60/p4/FrequencyNode.cpp:10: first defined here
等等……
- 我已经/添加了标题保护,包括尝试 #pragma 一次
- FrequencyTable 本来是一个嵌套类,所以我试着把它分成两个类,还是一样的错误
- 我确实有类之外的函数,但它们不存在于我的 FrequencyTable 类或我与之分离的其他类中
我可以提供更多代码,但我不相信它完全相关,也许这就是我编译它的方式?
encoder.out : decoder.o encoder.o encoderRunner.o
g++ -ansi -Wall -g -o encoder.out decoder.o encoder.o encoderRunner.o
decoder.o : decoder.cpp decoder.h
g++ -ansi -Wall -g -c decoder.cpp
encoder.o : encoder.cpp encoder.h
g++ -ansi -Wall -g -c encoder.cpp
encoderRunner.o : encoderRunner.cpp CPUTimer.h encoder.h decoder.h
g++ -ansi -Wall -g -c encoderRunner.cpp
clean :
rm -f encoder.out decoder.o encoder.o encoderRunner.o
编辑1:
#pragma once
#ifndef FrequencyTable_H_
#define FrequencyTable_H_
#include "FrequencyNode.h"
//class FrequencyNode;
class FrequencyTable
{
private:
FrequencyNode *HighestNode;
FrequencyNode *LowestNode;
public:
FrequencyTable();
~FrequencyTable();
FrequencyNode * insert(unsigned char symbol); //USE THIS for new values in hash
unsigned char * GetOrder();
};
//#include "FrequencyTable.cpp"
#endif
Edit2(Ed 的请求):
#include "FrequencyTable.h"
#include "FrequencyNode.h"
#include <iostream>
#include <stdlib.h>
using namespace std;
请告诉我您还需要什么其他信息
【问题讨论】:
-
你能创建一个 SSCCE 来展示这种行为吗?
-
这不是您的真实代码,因为您甚至从未构建
FrequencyNode.cpp。还是您将其包含在标题中?不要。 -
您的文件之一似乎是#include-ing FrequencyNode.cpp。你绝对不想那样。
-
我没有创建 makefile,它是我的教授用来制作项目的文件,我假设 makefile 将在他概述的编码器和解码器中创建我的类
-
@Sersay
//#include "FrequencyTable.cpp"如果那是有问题的代码,则应改为扩展 makefile,以编译和链接FrequencyTable.cpp。
标签: c++ compiler-errors