LNK2019未解析符号

LNK2019 uresolved symbol

本文关键字:符号 LNK2019      更新时间:2023-10-16

我很纠结

main.obj:-1: error: LNK2019: unresolved external symbol "public: __cdecl Book::Book(void)" (??0Book@@QEAA@XZ) referenced in function main
main.obj:-1: error: LNK2019: unresolved external symbol "public: void __cdecl Book::update(class Order)" (?update@Book@@QEAAXVOrder@@@Z) referenced in function main

据我所知,这通常是因为缺少选择器,但我不认为自己错过了任何东西。此外,没有静态变量,参数似乎正确,…查看下面的问题列表并没有帮助找出问题。

https://msdn.microsoft.com/en-us/library/799kze2z.aspx

#include <QCoreApplication>
#include <order.h>
#include <book.h>
#include <iostream>
#include <vector>
std::vector<Order> md_orders;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    Order order;
    order.setIsBid( true );
    order.setSize( 500 );
    order.setPrice( 10.00 );
    double price = order.getPrice();
    Book book;
    book.update( order );
    std::cout << price;

    return a.exec();
}

book.h

#ifndef BOOK_H
#define BOOK_H
//#include <order.h>
#include <vector>
class Book
{
public:
    Book();
    Order getBest( double, bool );
    void update( Order );
    double getBestPrice( bool );
private:
    std::vector<Order> _orders;
};
#endif // BOOK_H

book.cpp

#include "book.h"
#include <limits>
//#include <order.h>
#include <iostream>
int imax = std::numeric_limits<int>::max();
Book::Book()
{
}

void Book::update( Order order ) {
    std::cout << order.getSize();
}

我是新来的。我似乎对书本类和订单类做了同样的事情,它工作得很好。这很令人困惑。指针吗?

所以,出于好奇,我创建了一个新的项目,并添加了一个类TestA并运行它,一切顺利。然后我以完全相同的方式创建了类TestB,它以与TestB相同的错误中断,但不是TestA

#include <QCoreApplication>
#include "testa.h"
#include "testb.h"
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    TestA A;
    TestB B;
    return a.exec();
}

testa.h

#ifndef TESTA_H
#define TESTA_H

class TestA
{
public:
    TestA();
};
#endif // TESTA_H

testb.h

#ifndef TESTB_H
#define TESTB_H

class TestB
{
public:
    TestB();
};
#endif // TESTB_H

抛出此

main.obj:-1: error: LNK2019: unresolved external symbol "public: __cdecl TestB::TestB(void)" (??0TestB@@QEAA@XZ) referenced in function main

这些都在qt creator上。这看起来很奇怪

在main.cpp中,

注意如何包含book.h编译器无法在本地目录中查找book.h,也无法在标准库位置中找到book的定义

代替#include <book.h>使用#include"book.h"

进一步添加。

您没有在book.cpp中定义下面的方法,并且您正在尝试从主函数访问它们。你所有痛苦的原因。

Order getBest( double, bool );
double getBestPrice( bool );

您应该执行以下操作(如果您手动运行编译器和链接器):

    编译main.cpp 编译book.cpp
  1. 链接两个文件为一个可执行文件

如果编译器允许,上述所有操作都可以在一个命令中完成。

由于我不熟悉MSVC编译器,我将展示如何使用gcc完成此操作:

gcc -c -o main.o main.cpp # Compiles main.cpp into main.o
gcc -c -o book.o book.cpp # Compiles book.cpp into book.o
gcc -o my_app main.o book.o # Creates the my_app executable from main.o and book.o

gcc -o my_app main.cpp book.cpp # Does all of above in one command