4

我正在编写一个程序来测试具体继承,尽管我无法解决 Clang 返回的重复符号链接器错误。我的理解是重复的符号总是不正确的包含/保护的结果。我已经三次检查了我的包含/保护,但我找不到任何错误。重复的符号可能是不是包含守卫的结果?非常感谢,随着我的编程技能的提高,我打算经常在这里做出贡献。

。H

#ifndef POINTARRAY_H
#define POINTARRAY_H
#include "array.h"

namespace Jules
{
    namespace Containers
    {
        class PointArray: public Array<Point>
        {
        public:
            PointArray();    //default constructor
            ~PointArray();    //destructor
            PointArray(const PointArray& p);    //copy constructor
            PointArray(const int i);    //constructor with input argument
            PointArray& operator = (const PointArray& source);    //assignment operator
            double Length() const;    //length between points in array
        };
    }
}
#ifndef POINTARRAY_CPP
#include "PointArray.cpp"
#endif
#endif

.cpp

#ifndef POINTARRAY_CPP
#define POINTARRAY_CPP
#include "PointArray.h"

using namespace Jules::CAD;

namespace Jules
{
    namespace Containers
    {
        PointArray::PointArray() : Array<Point>()    //default constructor
        {
        }

        PointArray::~PointArray()    //destructor
        {
        }

        PointArray::PointArray(const PointArray& p) : Array<Point>(p)    //copy constructor
        {
        }

        PointArray::PointArray(const int i) : Array<Point>(i)    //constructor with input argument
        {
        }

        PointArray& PointArray::operator = (const PointArray& source)    //assignment operator
        {
            if (this == &source)
                return *this;
            PointArray::operator = (source);
            return *this;
        }

        double PointArray::Length() const
        {
        double lengthOfPoints = 0;
        for (int i = 0; i < Array::Size()-1; i++)
            lengthOfPoints += (*this)[i].Distance((*this)[i+1]);
            return lengthOfPoints;
        }
    }
}
#endif

更新:谢谢大家的帮助。我现在了解机械原理。

4

2 回答 2

2

不要cpp在标题中包含该文件。如果你这样做,每个包含你的标题的翻译单元最终都会有一个类的定义,例如,PointArray导致多个定义的链接器错误。

从您的标题中删除它。

#ifndef POINTARRAY_CPP
#include "PointArray.cpp"
#endif
#endif
于 2015-02-18T04:57:49.437 回答
1

您正在#includeing.cpp中的文件.h,这将导致.cpp代码包含在每个使用 的文件中.h(因此有重复的符号)。您还滥用了包含保护:只有头文件需要包含保护;.cpp文件不应该有它们。

于 2015-02-18T04:57:56.707 回答