我在c ++编程方面很陌生......一年前我开始用c#编程,所以我在一些非常基本的东西上失败了......我想...... 我创建了一个名为vector的类,它是3d空间中的一个点,其标题如下所示:
class vec3
{
double x, y, z;
public:
vec3();
vec3(double x, double y, double z);
double calculateLLength(void);
double distance(double x1, double y1, double z1);
double distance(const vec3 &vec);
~vec3(void);
};
在此之后,我应该写一个名为sphere的类,其中心点是 我的矢量类中的矢量看起来像这个(球体标题):
#pragma once
#include "vec3.h"
class Sphere
{
vec3 center1;
double x, y, z;
double radius1;
static const double PI;
public:
//constructs
Sphere(double x, double y, double z, double radius);
Sphere(vec3 center1, double radius);
//Methods
bool inside(const vec3 ¢er);
bool overlap(const Sphere &sphere);
double area();
double volume();
~Sphere(void);
};
我得到的错误是:错误LNK1120:1个未解析的外部
我试图谷歌这个,并在我周六的大部分时间里试图解决它但不能...... 我很乐意帮忙!提前谢谢!
(如果有人需要,这是cpp文件!)
Sphere.cpp:
#include "StdAfx.h"
#include "Sphere.h"
#include "vec3.h"
#include <math.h>
const double Sphere::PI = 3.1415926535;
Sphere::Sphere(double centerX, double centerY, double centerZ, double radius)
{
vec3 center(centerX, centerY, centerZ);
radius1 = radius;
}
Sphere::Sphere(vec3 center, double radius)
{
center1 = center;
radius1 = radius;
}
bool Sphere::inside(const vec3 ¢er)
{
if(radius1 < center1.distance(center))
return false;
else
return true;
}
bool Sphere::overlap(const Sphere &sphere)
{
if(this->center1.distance(sphere.center1) < radius1 + sphere.radius1)
return true;
else
return false;
}
double Sphere::area()
{
}
double Sphere::volume()
{
}
Sphere::~Sphere(void)
{
}
vec3.cpp:
#include "StdAfx.h"
#include "vec3.h"
#include <math.h>
vec3::vec3(double x, double y, double z)
{
this->x=x;
this->y=y;
this->z=z;
}
double vec3::calculateLLength()
{
return sqrt((x*x) + (y*y) + (z*z));
}
double vec3::distance(double x1, double y1, double z1)
{
return sqrt( ((this->x - x1)*(this->x - x1)) + ((this->y - y1)*(this->y - y1)) + ((this->z - z1)*(this->z - z1)) );
}
double vec3::distance(const vec3 &vec)
{
return sqrt( ((this->x - vec.x)*(this->x - vec.x)) + ((this->y - vec.y)*(this->y - vec.y)) + ((this->z - vec.z)*(this->z - vec.z)) );
}
vec3::~vec3(void)
{
}
答案 0 :(得分:1)
如果您发布的代码是实际代码,那么您收到该消息是因为之前的编译失败了 - Sphere::area
和Sphere::volume
必须返回一些内容,但是您的空。
由于Sphere.cpp
的编译失败,因此没有“Sphere.o”文件,并且链接器会抱怨那里已定义的所有内容。
当你构建C ++时,重要的是要从第一个开始经历错误,因为这个错误经常会导致更多的错误。
答案 1 :(得分:1)
问题是您已经声明了vec3的默认构造函数,但是您没有为它提供定义。将以下代码添加到vec3.cpp:
vec3.cpp:
vec3::vec3()
:x(0),y(0),z(0)
{
}
旁注,Sphere::area
和Sphere::volume
需要返回值,因为它们已声明返回double
:
double Sphere::area()
{
return 0.0;
}
double Sphere::volume()
{
return 0.0;
}
答案 2 :(得分:0)
在编译实际程序时,您可能忘记将所有源cpp
文件链接在一起。
通过在头文件(* .h)中声明您的类,您只需要描述类的外观。您还需要定义这些类的实现;这些是在源文件(* .cpp)中编写的内容。当您将最终程序链接在一起时,请确保您链接所有已编译的源文件,否则链接器将无法解析定义以查找您已经的内容>声明
我不知道您的构建环境是如何设置的,但典型IDE中的解决方案是确保所有源都标记为用于创建最终可执行文件。
答案 3 :(得分:0)
看一下这篇文章,看看它是否对你有帮助......
C++ Fatal Error LNK1120: 1 unresolved externals
根据我的理解,当您设置项目时,您没有指定您将使用Windows应用程序,因此它没有将Windows API与您的应用程序相关联。
答案 4 :(得分:0)
如果没有看到确切的错误,就很难确切地说出问题所在。你得到的错误是由你的链接器抱怨它无法找到你定义的一个“符号”(= function,class ...)的实现引起的。这种错误可能是由Visual Studio中的预编译头文件的错误使用引起的(“stdafx.h”)。您应该尝试创建一个新项目并停用预编译的头文件,对于小项目,您不需要它们。顺便说一句,在C ++中,您应该包含<cmath>
,它将C库<math.h>
包装在std
命名空间中。