我是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
正常工作。如果有人能给我一个提示,告诉我如何在未来的路上制作这样的工作,那将是非常棒的:)
答案 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 }