如何解决LNK2019 未解析的外部符号使用我在头文件中定义的静态函数
我已经看到很多关于这个话题的问题,但没有一个和我有同样的问题。正如我所见,当函数声明或初始化出现问题时会发生此错误,但我的两个都正确定义和初始化了所有内容。
我在 Piece.h 文件中正确完成了定义,并使用 cpp 文件中的 ClassName 进行了正确的初始化。
这是我的 Piece.h:
#pragma once
#include <SFML/Graphics.hpp>;
using namespace sf;
class Piece
{
public:
static Sprite blackKingTexture;
static Sprite whiteKingTexture;
static Sprite blackKnightTexture;
static Sprite whiteKnightTexture;
static Sprite blackRookTexture;
static Sprite whiteRookTexture;
static Sprite blackBishopTexture;
static Sprite whiteBishopTexture;
static Sprite whiteQueenTexture;
static Sprite blackQueenTexture;
static Sprite whitePawnTexture;
static Sprite blackPawnTexture;
static uint8_t white;
static uint8_t black;
static uint8_t queen;
static uint8_t king;
static uint8_t bishop;
static uint8_t knight;
static uint8_t rook;
static uint8_t pawn;
static void init();
static void loadImages();
static void loadTypes();
};
这是我的 Piece.cpp:
#include "Piece.h"
Sprite Piece::blackKingTexture = Sprite();
Sprite Piece::whiteKingTexture;
Sprite Piece::blackKnightTexture;
Sprite Piece::whiteKnightTexture;
Sprite Piece::blackRookTexture;
Sprite Piece::whiteRookTexture;
Sprite Piece::blackBishopTexture;
Sprite Piece::whiteBishopTexture;
Sprite Piece::whiteQueenTexture;
Sprite Piece::blackQueenTexture;
Sprite Piece::whitePawnTexture;
Sprite Piece::blackPawnTexture;
uint8_t Piece::white;
uint8_t Piece::black;
uint8_t Piece::queen;
uint8_t Piece::king;
uint8_t Piece::bishop;
uint8_t Piece::knight;
uint8_t Piece::rook;
uint8_t Piece::pawn;
void Piece::init() {
loadImages();
loadTypes();
}
void Piece::loadImages() {
Texture texture;
texture.loadFromFile("graphics/BlackKing.png");
blackKingTexture = Sprite(texture);
texture.loadFromFile("graphics/WhiteKing.png");
whiteKingTexture.setTexture(texture);
texture.loadFromFile("graphics/BlackKnight.png");
blackKnightTexture = Sprite(texture);
texture.loadFromFile("graphics/WhiteKnight.png");
whiteKnightTexture = Sprite(texture);
texture.loadFromFile("graphics/BlackRook.png");
blackRookTexture = Sprite(texture);
texture.loadFromFile("graphics/WhiteRook.png");
whiteKingTexture = Sprite(texture);
texture.loadFromFile("graphics/BlackBishop.png");
blackBishopTexture = Sprite(texture);
texture.loadFromFile("graphics/WhiteBishop.png");
whiteBishopTexture = Sprite(texture);
texture.loadFromFile("graphics/BlackQueen.png");
blackQueenTexture = Sprite(texture);
texture.loadFromFile("graphics/WhiteQueen.png");
whiteQueenTexture = Sprite(texture);
texture.loadFromFile("graphics/BlackPawn.png");
blackPawnTexture = Sprite(texture);
texture.loadFromFile("graphics/WhitePawn.png");
whitePawnTexture = Sprite(texture);
}
void Piece::loadTypes() {
//first 3 bits for type
pawn = 1;
rook = 2;
knight = 4;
bishop = 8;
queen = 16;
king = 32;
//last 2 bits for color
white = 64;
black = 128;
}
然后我只是像这样调用 Board.cpp 文件中的 Piece::init() 。它应该可以工作...
#include <SFML/Graphics.hpp>;
#include <string>
#include <cctype>
#include <iostream>
#include "Piece.h"
using namespace sf;
class Board {
public:
char board[8][8];
Board(const std::string& fen) {
Piece::init();
loadBoardFromFen(fen);
}
...
错误是:
Error LNK2019 unresolved external symbol "public: static void __cdecl Piece::init(void)" (?init@Piece@@SAXXZ) referenced in function "public: __thiscall Board::Board(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0Board@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
Build started...
1>------ Build started: Project: Basic Chess Game,Configuration: Debug Win32 ------
1>Basic Chess Game.obj : error LNK2019: unresolved external symbol "public: static void __cdecl Piece::init(void)" (?init@Piece@@SAXXZ) referenced in function "public: __thiscall Board::Board(class std::basic_string<char,class std::allocator<char> > const &)" (??0Board@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
1 : Fatal error LNK1120: 1 unresolved externals
1>Done building project "Basic Chess Game.vcxproj" -- Failed.
========== Build: 0 succeeded,1 Failed,0 up-to-date,0 skipped ==========
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。