Visual Studio 2010-致命错误LNK1120:1个未解析的外部; C ++

时间:2015-10-24 05:49:43

标签: c++ visual-studio visual-studio-2010 visual-studio-2012

我收到了错误:

  

asteroid.obj:错误LNK2001:未解析的外部符号"私人:   static char(* Asteroid :: Image)[4]" (?图片@ @@小行星0PAY03DA)   1> C:\ Users \ john \ Documents \ Visual Studio   2010 \ Projects \ assignment3.1 \ Debug \ assignment3.1.exe:致命错误   LNK1120:1个未解析的外部

我在Code中看不到我的问题。在我的计划中唯一改变的是制作我的" Image"和#34; LoadImage"成员职能。

这就是我现在的头文件中的代码(跳过一些公共函数)

class Asteroid
{
private:
static const int ROWS = 3;
static const int COLUMNS = 4;
int row;
int column;
int row_size;
int column_size;
unsigned int ore_value;
static char Image[ROWS][COLUMNS];

public: static void LoadImage();
};

这就是.cpp文件中的LoadImage()函数的样子

void Asteroid::LoadImage()
{
string myline;
ifstream asteroid_image_data("asteroid.txt");
if (asteroid_image_data.fail())
{
    cerr << "Asteroid image file is not available" << endl;
    return;
}

for (unsigned int i = 0; i < ROWS; i++)
{
    getline(asteroid_image_data, myline, '\n');
    if (!asteroid_image_data)
    {
        cerr << "Asteroid image file is missing some data" << endl;
        return;
    }

    for (unsigned int j = 0; j < COLUMNS; j++)
    {
        Image[i][j] = myline[j];
    }
}
asteroid_image_data.close();
}

来自main.cpp的电话只是

Asteroid::LoadImage();

1 个答案:

答案 0 :(得分:1)

  

您必须为静态字符数组添加定义

     

以下是如何在标题cpp文件中执行此操作:

   char Asteroid::Image[3][4] = { {'0','0','0','0'},
                                  { '0','0','0','0'},
                                  { '0','0','0','0'}
                                };

或者

   char Asteroid::Image[3][4];
  

没有像这样的问题,它可以正常工作

Your header file (Header.h):

        #pragma once

        #include <string>

        using namespace std;

        class Asteroid
        {
        private:
            static const int ROWS = 3;
            static const int COLUMNS = 4;
            int row;
            int column;
            int row_size;
            int column_size;
            unsigned int ore_value;
            static char Image[ROWS][COLUMNS];

            public: static void LoadImage();
        };

<强> Header.cpp:

#include "Header.h"
#include <fstream>
#include <iostream>

using namespace std;

void Asteroid::LoadImage()
{
    string myline;
    ifstream asteroid_image_data("asteroid.txt");

    if (asteroid_image_data.fail())
    {
        cerr << "Asteroid image file is not available" << endl;
        return;
    }

    for (unsigned int i = 0; i < ROWS; i++)
    {
        getline(asteroid_image_data, myline, '\n');

        if (!asteroid_image_data)
        {
            cerr << "Asteroid image file is missing some data" << endl;
            return;
        }

        for (unsigned int j = 0; j < COLUMNS; j++)
        {
            Image[i][j] = myline[j];
        }
    }
    asteroid_image_data.close();
}

char Asteroid::Image[3][4];

主文件(Source.cpp):

    #include <iostream>
    #include "Header.h""

    int main() {

        Asteroid::LoadImage();
    }