I need to use a C++ singleton in ViewController,and got error.

TradeAPIManager.h

 #include <stdio.h>
    class TradeAPIManager{
    public:
        static TradeAPIManager * getInstance();
            void test();
    private:
        TradeAPIManager(){}
        static TradeAPIManager *m_pInstance;
    };

TradeAPIManager.cpp

#include "TradeAPIManager.h"
TradeAPIManager *TradeAPIManager::m_pInstance = nullptr;
TradeAPIManager *TradeAPIManager::getInstance(){
    if(m_pInstance == nullptr){
        m_pInstance = new TradeAPIManager();
    }
    return m_pInstance;
}

void test(){
    printf("asdasd");
}

ViewController.mm

- (void)viewDidLoad {
    [super viewDidLoad];
    TradeAPIManager *manager = TradeAPIManager::getInstance();
    manager->test();
}

when build,i got error like this:

Undefined symbols for architecture x86_64:
  "TradeAPIManager::test()", referenced from:
      -[ViewController viewDidLoad] in ViewController.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Undefined symbols for architecture x86_64 in simulator

Undefined symbols for architecture arm64 in my iPhone

thats not a .a lib or a framework,just a cpp file write by myself I tried six hours but have no way out. hope anyone can help many thanks


在 TradeAPIManager.cpp 中,void test...应阅读TradeAPIManager::test.... 线索在错误消息中。

保罗回答了。在 C++ 中,.cpp 中的 void test() 不同于 void TradeAPIManager::test() 您正在尝试调用您未实现的 TradeAPIManager::test() 。只需将 void test() 重命名为 void TradeAPIManager::test()