微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

LNK2019 未解析的外部符号使用我在头文件中定义的静态函数

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?