0

I have 3 files pos.h pos.cpp and main.cpp .... I am trying to call a function from pos.cpp in the main class for instance :

pos.h file

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();
}

Problem is I always get that pos1 is not a class or namespace I am compining as follows g++ mainpos.cpp pos.cpp pos.h -o position -lpthread Any thoughts ?

4

3 回答 3

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(),它不是该类的成员,那么您需要将函数声明添加到正确的头文件中并正确使用它,但这是一个单独的问题。

于 2013-06-18T19:40:33.803 回答
0

您有几个问题,其中大部分与基本语法有关:

  1. 案件很重要。是两个完全不同的open_port东西Open_port

  2. 您实际上并没有定义类的方法pos,而是在创建一个新函数

    int Open_port()    {
    

    需要是

    int pos::open_port()    {
    
  3. 您正在尝试静态调用非静态方法。您需要创建一个 , 的实例pos(您已经完成了 , pos1)并open_port通过pos1.open_port(). pos::open_port除非您声明方法,否则您不能直接调用static

  4. 最后一个问题是您已声明但未定义类的默认构造函数。您需要为pos::pos().

于 2013-06-18T19:40:06.233 回答
0

好吧,您的代码有两个问题。在cpp文件中,您需要使用该功能的范围,因此您需要:

int pos::Open_port()

此外,您需要确保open_portOpen_port的拼写和大写相同。

最后一件事,如果你想这样调用open_port,你需要像static在类 def'n 中一样 decare 函数。

于 2013-06-18T19:41:40.340 回答