标题

时间:2016-10-11 07:42:27

标签: c++ visual-c++

我是C ++的新手,我在自己的项目中一直在努力。我遇到了这个标题和.cpp文件的错误

// main.cpp

#include <iostream>
#include "Header.h"

int main() {
    MyClass::TestFunction(); //'MyClass::TestFunction': illegal call of non-static member function
}
// header.h

#ifndef HEADER_H
#define HEADER_H

#include <iostream>

class MyClass {
public:
    void TestFunction() {
        std::cout << "Hello World\n"; //Where I beleive the issue is
    }
};

#endif

现在我认为问题来自std::cout不是静态的,main.cpp中的声明需要它是静态的,但我不知道如何制作它静态,以便main.cpp正常工作。如果有人能给我一个提示,告诉我如何在未来的路上制作这样的工作,那将是非常棒的:)

2 个答案:

答案 0 :(得分:3)

  

问题来自std :: cout不是静态的,而main.cpp中的声明需要它是静态的

你要么必须使你的函数变为静态,要么使你的类的对象成为一个对象,然后调用它的函数:

的main.cpp

int main() {
    MyClass pony;
    pony.TestFunction();
}

OR

header.h

class MyClass {
public:
    static void TestFunction() {
        std::cout << "Hello World\n";
    }
};

答案 1 :(得分:1)

只要在类中编写成员函数,就只能使用object调用它。您必须在main函数中创建一个对象。

class DaoDemo{
   //@Autowired
   //private DataSource dataSource;
   private JdbcTemplate jdbcTemplate;

   @Autowired
   public void setDataSource(DataSource dataSource){
     //this.dataSource = dataSource;  
     this.jdbcTemplate = new JdbcTemplate(dataSource);
   }

   public int getTableRowCount(){
      String sql = "SELECT COUNT(*) FROM DEMOTABLE";
      //jdbcTemplate.setDataSource(dataSource);    //No need to do this as its done in DataSource Setter now.
      return jdbcTemplate.queryForObject(sql,Integer.class);

}

OR 如果您不想使用object,则将成员函数设置为static。

// main.cpp

#include <iostream>
#include "header.h"

int main() {
    MyClass myObject;
    myObject.TestFunction(); //'MyClass::TestFunction': illegal call of non-static member function }