gpt4 book ai didi

visual-c++ - LNK2019 内联函数 Unresolved 错误

转载 作者:行者123 更新时间:2023-12-02 10:41:41 25 4
gpt4 key购买 nike

我不知道为什么会这样。我得到的错误如下:

Error   2   error LNK2019: unresolved external symbol "public: int __thiscall Graphics::GLMatrix::getColumnSize(void)" (?getColumnSize@GLMatrix@Graphics@@QAEHXZ) referenced in function _SDL_main  C:\Users\holland\Documents\code\c++\projects\OpenGL_01\OpenGL_01\main.obj
Error 3 error LNK2019: unresolved external symbol "public: int __thiscall Graphics::GLMatrix::getRowSize(void)" (?getRowSize@GLMatrix@Graphics@@QAEHXZ) referenced in function _SDL_main C:\Users\holland\Documents\code\c++\projects\OpenGL_01\OpenGL_01\main.obj
Error 4 error LNK1120: 2 unresolved externals C:\Users\holland\Documents\code\c++\projects\OpenGL_01\Debug\OpenGL_01.exe

没有链接的是来 self 的 Matrix 类的 getRowSize()getColumnSize() 函数。我做错了什么?

那么,我在这里做错了什么?我一直在寻找……从各个方面寻找。

代码

头文件:

#ifndef GLMATRIX_H
#define GLMATRIX_H

#pragma once

#include <array>


namespace Graphics {

class GLMatrix
{
public:
GLMatrix(int sizeX, int sizeY);
~GLMatrix();
void allocMatrix();
void addColumnI(int row, int column, long item);
void revertRowsByColumns(); /*changes the formula of r * c to c * r*/
GLMatrix &operator *(float scalar); /*multiply by scalar*/
inline int getRowSize();
inline int getColumnSize();
private:
int _sizeX, _sizeY;
long** _pArray;
};

}

#endif //GLMATRIX_H

来源:

#include "GLMatrix.h"

namespace Graphics {

GLMatrix::GLMatrix(int sizeX, int sizeY)
{
_sizeX = sizeX;
_sizeY = sizeY;
}

GLMatrix::~GLMatrix()
{
delete _pArray;
}

void GLMatrix::addColumnI(int row, int column, long item) {

}

inline int GLMatrix::getRowSize() {
return _sizeX;
}

inline int GLMatrix::getColumnSize() {
return _sizeY;
}

void GLMatrix::allocMatrix() {

_pArray = new long*[_sizeX];

for (int i = 0; i < _sizeX; ++i) {
_pArray[i] = new long[_sizeY];
}

}

void GLMatrix::revertRowsByColumns() {

long** columns = new long*[_sizeY];

for (int col = 0; col < _sizeY; ++col) {
columns[col] = new long[_sizeX];
memmove(
columns + col,
_pArray[_sizeX - col],
sizeof(_sizeX) - sizeof(col)
);
}
}

}

主要内容:

#include <SDL.h>
#include "GLMatrix.h"


int main(int argc, char* argv[]) {

//SDL_Init(SDL_INIT_EVERYTHING);

//matrix test

Graphics::GLMatrix* matrix = new Graphics::GLMatrix(3, 3);

int num_rows = matrix->getRowSize();
int num_columns = matrix->getColumnSize();
for (int row = 0; row < num_rows; ++row) {

}

//SDL_Quit();

delete matrix;

return 0;
}

最佳答案

必须在头文件中声明内联函数的常识不再正确。几年以来,大多数编译器都实现了一种称为链接时间优化 (gcc) 或链接时间代码生成 (VC) 的功能,该功能保存有关内联函数(以及其他)的重要信息,允许链接器将所有目标文件视为“一大快乐翻译单位”。因此,链接器可以内联您放入 cpp 文件中的函数。

相关链接: http://msdn.microsoft.com/en-us/library/xbf3tbeh.aspx http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html (搜索-flto)

编辑:从我之前写的内容显然无法理解。此功能并非旨在避免懒惰的程序员在每个翻译单元中声明内联函数。但它确实会给您带来可能导致问题的副产品。请在头文件中声明内联函数。

关于visual-c++ - LNK2019 内联函数 Unresolved 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8611725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com