C++ Visual Studio 2010-致命错误LNK1120:1未解析的外部;c++;
我一直收到错误消息: 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文件中的样子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
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();
}