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

C++ Visual Studio 2010-致命错误LNK1120:1未解析的外部;c++;,c++,visual-studio,visual-studio-2010,visual-studio-2012,C++,Visual Studio,Visual Studio 2010,Visual Studio 2012,我一直收到错误消息: asteroid.obj:错误LNK2001:未解析的外部符号“private: 静态字符(*小行星::图像)[4]“(?)?Image@Asteroid@@0PAY03DA) 1> C:\Users\john\Documents\Visual Studio 2010\Projects\assignment3.1\Debug\assignment3.1.exe:致命错误 LNK1120:1个未解析的外部 我看不出我的代码有什么问题。在我的程序中唯一改变的事情就是生成“Ima

我一直收到错误消息:

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

我看不出我的代码有什么问题。在我的程序中唯一改变的事情就是生成“Image”和“LoadImage”成员函数

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

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

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();
}
您必须为静态字符数组添加定义

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

没有像这样的问题,它是有效的

您的头文件(header.h):
#布拉格语一次
#包括
使用名称空间std;
类小行星
{
私人:
静态常量int行=3;
静态常量int列=4;
int行;
int列;
int行大小;
int列的大小;
无符号int或u值;
静态字符图像[行][列];
public:静态void LoadImage();
};
标题。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];
    #include <iostream>
    #include "Header.h""

    int main() {

        Asteroid::LoadImage();
    }
#包括“Header.h”
#包括
#包括
使用名称空间std;
void Asteroid::LoadImage()
{
线状糜棱线;
ifstream小行星图像数据(“asteroid.txt”);
if(小行星图像数据失败())
{

cerr如果您定义图像不是静态的,会发生什么?您的链接不会显示您的所有内容code@MORTAL我得到:::1>c:\users\john\documents\visualstudio 2010\projects\assignment3.1\assignment3.1\asteroid.cpp(38):错误C2597:非法引用非静态成员“Asteroid::Image”1>c:\users\john\documents\visual studio 2010\projects\assignment3.1\assignment3.1\Asteroid.cpp(38):错误C3867:“Asteroid::Image”:函数调用缺少参数列表;使用“&Asteroid::Image”创建指向成员1>c:\users\john\documents\visual studio 2010\projects\assignment3.1\assignment3.1\Asteroid.cpp(38)的指针:错误C2109:下标需要数组或指针类型。很难知道是什么原因导致它。如果没有代码,如何修复它。如果代码很长,您可能需要编写min示例。是的,我认为OP没有声明图像。您可以像这样声明它
char Asteroid::image[3][4]
而没有
{0}
compile会将它初始化为零,因为它是静态的。没关系,我可以更改。哦,是的,我现在明白了,再次感谢,我想他有选择的余地
   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();
        };
#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];
    #include <iostream>
    #include "Header.h""

    int main() {

        Asteroid::LoadImage();
    }