在我的Mac OSX El Capitan上编译带有意外错误的简单C++类

Compile Simple C++ class with unexpected errors on my Mac OSX El Capitan

本文关键字:错误 意外 简单 C++ 编译 Mac 我的 OSX El Capitan      更新时间:2023-10-16

我的类文件:Mylib.h

class myclass {
    public:
        myclass();
    public:
        void fun();
};

我的头文件:Mylib.cpp

myclass::myclass() {
}
void myclass::fun() {
    std::cout<<"fun"<<std::endl;
}

我的主文件:try.cpp

#include<iostream>
#include "Mylib.h"
using namespace std;
int main() {
    std::cout<<"cool"<<std::endl;
    myclass myobj;
}

我在我的Mac OSX El Captitan(10.11.4)中编译try.cpp

g++-o尝试.cpp

我收到以下错误:

g++ -o try try.cpp 
Undefined symbols for architecture x86_64:
  "myclass::myclass()", referenced from:
      _main in try-f5efba.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

这是我的Mac OSX上的g++信息

g++ --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/c++/4.2.1
Apple LLVM version 7.3.0 (clang-703.0.29)
Target: x86_64-apple-darwin15.4.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

此代码不会使用任何编译器进行编译。首先,Mylib.h有类实现,Mylib.cpp有类定义。这是工作代码(有点修改):

Mylib.cpp

#include<iostream>
#include "Mylib.h"
MyClass::MyClass() { }
void MyClass::fun() {
    std::cout << "fun" << std::endl;
}

Mylib.h

class MyClass {
    public:
        MyClass();
        void fun();
};

try.cpp

#include<iostream>
#include "Mylib.h"
int main() {
    std::cout<<"cool"<<std::endl;
    MyClass myobj;
    myobj.fun();
}

使用:g++ -o try try.cpp Mylib.cpp 编译