gpt4 book ai didi

C++ 重复符号链接(symbolic link)器错误与适当的包含保护?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:01:52 38 4
gpt4 key购买 nike

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

.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

更新:感谢大家的帮助。我现在了解机制了。

最佳答案

不要在标题中包含 cpp 文件。如果您这样做,每个包含您的 header 的翻译单元都将以类的定义结束,例如 PointArray 导致包含多个定义的链接器错误。

从您的 header 中删除它。

#ifndef POINTARRAY_CPP
#include "PointArray.cpp"
#endif
#endif

关于C++ 重复符号链接(symbolic link)器错误与适当的包含保护?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28576227/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com