不能将共享指针作为参数传递给函数定义?
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>
.
如果我将一个带有共享指针作为参数的函数声明及其定义放在 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>
.