我的项目设置是

  • Xcode 8.3(8E162)
  • 语言C++

  • 我的项目结构是
    ├── README.md
    ├── TrollLanguage
    │   ├── TokenParser.cpp
    │   ├── TokenParser.hpp
    │   └── main.cpp
    

    我的源代码是

    main.cpp
    #include <iostream>
    #include "TokenParser.hpp"
    
    int main(int argc, const char * argv[]) {
        // insert code here...
        std::cout << "Hello, World!\n";
        TokenParser *tokenParser = new TokenParser();
        tokenParser->TestFunc();
        return 0;
    }
    

    TokenParser.cpp
    #include "TokenParser.hpp"
    
    void TestFunc() {
        std::cout << "can u see me?";
    }
    enter code here
    

    TokenParser.hpp
    #ifndef TokenParser_hpp
    #define TokenParser_hpp
    
    #include <iostream>
    
    class TokenParser {
    public:
        void TestFunc();
    };
    
    #endif /* TokenParser_hpp */
    

    预期的行为是
    Hello, World!
    can u see me?
    

    实际行为是
    Apple Mach-O Linker (Id) Error
    "TokenParser::TestFunc()", referenced from:
    Linker command failed with exit code 1(use -v to see invocation
    

    最佳答案

    您需要在实现文件中的函数定义之前添加类名。就目前而言,您正在定义一个名为TestFunc的自由函数。

    #include "TokenParser.hpp"
    
    void TokenParser::TestFunc() {
        std::cout << "can u see me?";
    }
    

    09-06 22:26