不能将共享指针作为参数传递给函数定义?

Can't pass shared pointer as parameter to function definition?

如果我将一个带有共享指针作为参数的函数声明及其定义放在 header 中,一切都可以正常编译,但试图将它们分成 .hpp.cpp 文件导致编译错误,如:

Use of undeclared identifier 'std' //Solved via including <memory> & <cstdint>
Variable has incomplete type 'void' //Solved via including <memory> & <cstdint>
Use of undeclared identifier 'uint8_t' //Solved via including <memory> & <cstdint>

例如:

对于这条主线:main.cpp

#include <iostream>
#include "example1.hpp" //Switch out with "example2.hpp"

int main(int argc, const char * argv[]) {

    std::shared_ptr<uint8_t> image =  0;

    foo(image);

    return 0;
}

这个作品:

example1.hpp

#ifndef example1_hpp
#define example1_hpp

#include <stdio.h>

    void foo(std::shared_ptr<uint8_t> variable) { }

#endif /* example1_hpp */

这不起作用:

example2.cpp

#include "example2.hpp"

    void foo(std::shared_ptr<uint8_t> variable) {  }

example2.hpp

#ifndef example2_hpp
#define example2_hpp

#include <stdio.h>

    void foo(std::shared_ptr<uint8_t> variable);

#endif /* example2_hpp */

如何成功地将此函数的声明和定义分离到单独的文件中?

你有错误的包含。 <stdio.h> 是一个 C 头文件。要使用 shared_ptr,您需要包含 <memory>,要使用 uint8_t,您需要包含 <cstdint>.