我有3个文件pos.h pos.cpp和main.cpp ....我试图从主类中的pos.cpp调用一个函数,例如:
pos.h文件
class pos {
public:
pos(); //defualut constructor
int open_port();
}
pos.cpp
#include "pos.h"
int Open_port() {
//do stuff here
return 0;
}
class main.cpp
#include "pos.h"
int main(int argc , char** argv) {
pos pos1;
pos1::Open_port();
}
问题是我总是得到pos1不是我正在编写的类或命名空间,如下所示 g ++ mainpos.cpp pos.cpp pos.h -o position -lpthread 有什么想法吗?
答案 0 :(得分:2)
您似乎在代码中遇到了几个问题:
int open_port();
是pos
的成员函数。但是,在定义它时,您没有使用::
运算符,并且函数名称已更改。
尝试:
int pos::open_port()
{ ///^^pay attention to typos
//do stuff here
return 0;
}
然后在main
内。你可以这样做:
pos pos1;
pos1.open_port();
如果你的意思是Open_port()
,它不是该类的成员,那么你需要将函数声明添加到正确的头文件中并正确使用它,但这是一个单独的问题。
答案 1 :(得分:0)
你有几个问题,其中大部分都与基本语法有关:
案件问题。 open_port
和Open_port
是完全不同的两件事
你实际上并没有定义类pos
的方法,而是在创建一个新函数
int Open_port() {
需要
int pos::open_port() {
您正尝试静态调用非静态方法。您需要创建pos
的实例(已完成,pos1
)并通过open_port
在其上调用pos1.open_port()
。除非您声明方法pos::open_port
,否则无法直接致电static
。
最后一个问题是您已声明但未定义类的默认构造函数。您需要为pos::pos()
提供方法正文。
答案 2 :(得分:0)
嗯,你的代码有两个问题。在cpp
文件中,您需要使用该函数的范围,因此您需要:
int pos::Open_port()
此外,您需要确保open_port
和Open_port
的拼写和大小写相同。
最后,如果你想这样调用open_port
,你需要在类def'n中将该函数判定为static
。