2016-10-11 59 views
0

我对C++有点新鲜,并且在自己的项目中一直在努力。我遇到了一个错误与此头和.cpp文件标题中带有“std :: cout”的非静态成员引用


// 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正常工作。如果任何人都可以给我一个提示,我怎么能做出这样的事情以后工作前进的道路,这将是真棒:)

+3

的[权威的C++书指南和列表]可能的复制(http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – LogicStuff

+0

问题是, 'TestFunction'不是静态的,但是你使用调用静态函数的语法调用它。 –

回答

3

问题来自不是静态的std :: cout和宣言main.cpp中需要它是静态的

要么你必须让你的功能的静态或intanciate您的类的对象和母鸡调用其功能:

的main.cpp

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

OR

header.h每当一个成员函数的一类里面写

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

'return 0;'是多余的,'main'被定义为在执行到达末尾时返回'0' –

+0

嗯...... – Treycos

+1

只有在需要刷新缓冲区时使用'std :: endl',否则就会更快。 –

1

,它只能使用对象被调用。你必须在主函数中创建一个对象。

// main.cpp 

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

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

OR 如果你不想使用的对象,然后使成员函数为静态。

// header.h 

#ifndef HEADER_H 
#define HEADER_H 

#include <iostream> 

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

#endif 
相关问题