首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当我尝试将我的main函数分离到一个main.cpp中时,我遇到了一个奇怪的错误LNK2001

当我尝试将我的main函数分离到一个main.cpp中时,我遇到了一个奇怪的错误LNK2001
EN

Stack Overflow用户
提问于 2018-06-05 07:41:54
回答 1查看 39关注 0票数 -5

当我尝试在Visual studio中创建一个对象时,我得到了一个奇怪的错误LNK2001,我可以自己编译每个cpp文件,当我在city.cpp文件中使用main()函数而不使用main.cpp时,运行代码没有任何问题,这是代码,请帮助我在我刚接触c++和visual studio的任何地方都找不到答案,这可能是一个基本的错误,但我花了很长时间都没有找到解决方案

-main.cpp

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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中引用

EN

回答 1

Stack Overflow用户

发布于 2018-06-05 08:22:44

在您的代码中,您定义了两次类City,一个在City.h中,另一个在City.cpp中。您真正想做的是将City类划分为声明和定义。

因此,您应该有一个头文件City.h,其中声明了City类。它可能看起来像这样:

代码语言:javascript
复制
#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应该定义您的类:

代码语言:javascript
复制
#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并开始使用该类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50690170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档