PIMPL无法在macOS

时间:2018-04-02 09:06:22

标签: c++ c++11 clang++

我正在阅读pimpl code from github,并尝试在我的macOS笔记本电脑中编译如下:

file:foo.cpp

#include "foo.h"
#include <memory>

class foo::impl
{
  public:
    void do_internal_work()
    {
      internal_data = 5;
    }
  private:
    int internal_data = 0;
};
foo::foo()
  : pimpl{std::make_unique<impl>()}
{
  pimpl->do_internal_work();
}
foo::~foo() = default;
foo::foo(foo&&) = default;
foo& foo::operator=(foo&&) = default;

file:foo.h

#include <memory>
class foo
{
  public:
    foo();
    ~foo();
    foo(foo&&);
    foo& operator=(foo&&);
  private:
    class impl;
    std::unique_ptr<impl> pimpl;
};

file man.cpp

#include "foo.h"

#include <iostream>

int main() {
    foo x;
} 

我尝试使用clang++ -std=c++14 main.cc -o main进行编译,但是出现了错误:

  

未定义的符号   对于体系结构x86_64:“foo :: foo()”,引自:         _main in main-b39a70.o“foo :: ~foo()”,引自:         _main in main-b39a70.o ld:找不到架构x86_64 clang的符号:错误:链接器命令失败,退出代码为1(使用-v to   见调用)

1 个答案:

答案 0 :(得分:1)

您尚未将foo.cpp中的任何代码添加到编译器中。使用clang++ -std=c+14 main.cpp foo.cpp -o main进行编译可以解决您的问题。