当我尝试在Visual studio中创建一个对象时,我得到了一个奇怪的错误LNK2001,我可以自己编译每个cpp文件,当我在city.cpp文件中使用main()函数而不使用main.cpp时,运行代码没有任何问题,这是代码,请帮助我在我刚接触c++和visual studio的任何地方都找不到答案,这可能是一个基本的错误,但我花了很长时间都没有找到解决方案
-main.cpp
#include <iostream>
#include <algorithm>
#include <array>
#include <ctime>
#include <random>
#include "math.h"
#include "City.h"
#include "Path.h"
int main()
{
City city = City(0, 5, 10); // simple test
std::cout << city.GetX() << std::endl;
std::cin.get();
}
-City.cpp
#include <iostream>
#include <string>
#include <algorithm>
#include <functional>
#include <array>
#include "math.h"
class City
{
private:
unsigned int m_Id;
int m_X;
int m_Y;
std::array<float, 29> m_Distances;
public:
City()
:m_Id(0), m_X(0), m_Y(0)
{
}
City(unsigned int id, int x, int y)
: m_Id(id), m_X(x), m_Y(y)
{
}
const unsigned int GetID() const
{
return m_Id;
}
const int GetX() const
{
return m_X;
}
const int GetY() const
{
return m_Y;
}
const float GetDistanceTo(unsigned int index) const
{
return m_Distances[index];
}
const void updateDistances(const std::array<City, 29>& cities)
{
unsigned int i = 0;
for (const City& city : cities)
{
m_Distances[i++] = (float)round(sqrt(pow((m_X - city.GetX()), 2) + pow((m_Y - city.GetY()), 2)));
}
}
};
- City.h
#pragma once
#define PATH_SIZE 29;
class City
{
unsigned int m_Id;
int m_X;
int m_Y;
std::array<float, 29> m_Distances;
public:
City(unsigned int id, int x, int y);
City();
const int GetX() const;
const int GetY() const;
const unsigned int GetID() const;
const float GetDistanceTo(unsigned int index) const;
const void updateDistances(const std::array<City, 29>& cities) ;
};
1>-开始生成:项目: TSPV1,配置:调试Win32 - 1>City.cpp 1>main.cpp 1>Generating代码...1>main.obj :错误LNK2019:未解析的外部符号"public:__thiscall
City::City(unsigned int,int,int)“(??0City@@QAE@IHH@Z)在函数_main 1>main.obj中引用: error LNK2019: unresolved symbol "public: int常量__thiscall::GetX(空)常量”(?GetX@City@@QBE?BHXZ)在函数_main中引用
发布于 2018-06-05 08:22:44
在您的代码中,您定义了两次类City
,一个在City.h中,另一个在City.cpp中。您真正想做的是将City
类划分为声明和定义。
因此,您应该有一个头文件City.h,其中声明了City
类。它可能看起来像这样:
#ifndef CITY_H // These macros ensure that your
#define CITY_H // class is only defined ones.
#include <iostream>
#include <string>
#include <algorithm>
#include <functional>
#include <array>
#include <math.h>
#define PATH_SIZE 29 // replaced the occurrence of 29 in your code by this macro and removed ';'
class City
{
private:
unsigned int m_Id;
int m_X;
int m_Y;
std::array<float,PATH_SIZE> m_Distances;
public:
City(unsigned int id, int x, int y);
City();
const int GetX() const;
const int GetY() const;
const unsigned int GetID() const;
const float GetDistanceTo(unsigned int index) const;
const void updateDistances(const std::array<City,PATH_SIZE> &cities) ;
};
#endif
第二个源文件City.cpp应该定义您的类:
#include "City.h"
City::City()
:m_Id(0), m_X(0), m_Y(0)
{
}
City::City(unsigned int id, int x, int y)
: m_Id(id), m_X(x), m_Y(y)
{
}
const unsigned int City::GetID() const
{
return m_Id;
}
const int City::GetX() const
{
return m_X;
}
const int City::GetY() const
{
return m_Y;
}
const float City::GetDistanceTo(unsigned int index) const
{
return m_Distances[index];
}
const void City::updateDistances(const std::array<City,PATH_SIZE>& cities)
{
unsigned int i = 0;
for (const City& city : cities)
{
m_Distances[i++] = (float)round(sqrt(pow((m_X - city.GetX()), 2) + pow((m_Y - city.GetY()), 2)));
}
}
现在,您可以在main.cpp中包含City.h并开始使用该类。
https://stackoverflow.com/questions/50690170
复制相似问题