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

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

本文关键字:参数传递 函数 定义 共享 指针      更新时间:2023-10-16

如果我将共享指针作为参数的函数声明及其定义放在标头中,则一切都可以正常编译,但是尝试将它们分成.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>

例如:

对于这个主要:主要.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;
}

这有效:

示例1.hpp

#ifndef example1_hpp
#define example1_hpp
#include <stdio.h>
    void foo(std::shared_ptr<uint8_t> variable) { }
#endif /* example1_hpp */

这不起作用:

例2.cpp

#include "example2.hpp"
    void foo(std::shared_ptr<uint8_t> variable) {  }

示例2.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>