Visual Studio 2010 - 致命错误 LNK1120: 1 unresolved externals; C++
Posted
技术标签:
【中文标题】Visual Studio 2010 - 致命错误 LNK1120: 1 unresolved externals; C++【英文标题】:Visual Studio 2010- fatal error LNK1120: 1 unresolved externals; c++ 【发布时间】:2015-10-24 05:49:43 【问题描述】:我收到了错误:
asteroid.obj:错误 LNK2001:无法解析的外部符号“私有: 静态字符 (* Asteroid::Image)[4]" (?Image@Asteroid@@0PAY03DA) 1>C:\用户\约翰\文档\Visual Studio 2010\Projects\assignment3.1\Debug\assignment3.1.exe:致命错误 LNK1120: 1 个未解决的外部问题
而且我没有看到代码中的问题。我的程序中唯一改变的是我的“Image”和“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();
【问题讨论】:
如果你定义图像不是静态的会发生什么? 您的链接未显示您的所有代码 @MORTAL 我得到::: 1>c:\users\john\documents\visual studio 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-example 【参考方案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();
【讨论】:
是的,我认为 OP 没有声明图像。你可以像这样声明它char Asteroid::Image[3][4]
没有0
编译会将它初始化为零,因为它是静态的。
没关系,我可以改一下
哦,是的,我现在明白了,再次感谢,他有我认为的选择以上是关于Visual Studio 2010 - 致命错误 LNK1120: 1 unresolved externals; C++的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 2010 中调试时出现致命错误 HRESULT=0x80131c08
如何解决Visual Studio 2010 Ultimate中的CVT1100?
Visual Studio 2017 - Git 因致命错误而失败
Visual Studio 2019 CVT1101 & LNK1123 致命错误