c ++ .h和.cpp文件 - 关于方法

时间:2011-04-29 09:30:48

标签: c++

HI

如何在.h文件中定义bool方法并在cpp文件中使用它? 我有

my.h

#include <string>

public class me;
class me
{
public:
me();

private bool method(string name); //it is ok??

}

my.cpp

#include 'my.h';
me::me()
{
method(string name); //can i do this? isn't there another alternative?
}

method (String name)
{
cout<<"name"<<endl;
}

不工作。为什么?

3 个答案:

答案 0 :(得分:8)

我建议你从教程中学习C ++的基础知识

my.h

#include <string>

class me
{
    public:
       me();

       bool method(std::string name) const;
};

my.cpp

#include 'my.h';

me::me()
{
}

bool me::method(std::string name)
{
    std::cout << name << std::endl;
}

如上所述,我不需要将:: method作为成员函数(它可能是静态的)。

那里有很多小修复。我觉得你来自C#(可能是java)。阅读差异。谷歌有很好的消息来源:)

答案 1 :(得分:2)

您的代码存在许多问题。

my.h

#include <string>

// public class me; // Absolutely not needed. From which language did you get this?

class me
{
public:
me();

private: // You need the colon here. 

bool method(string name); //it is ok?? // No. The class is called std::string. You should pass it by const-reference (const std::string& name);

}

my.cpp

#include 'my.h';
me::me()
{
// `name` is undefined here. You also don't need to specify the type.
//method(string name); //can i do this? isn't there another alternative? 
    method("earl");
}

// method (String name) // See previous comment about const-reference and the name of the class. Also note that C++ is case-sensitive. You also need to specify the return type and the class name:
bool me::method(const std::string& name)
{
    // cout<<"name"<<endl; // Close...
    std::cout << "My name is " << name << std::endl;
    return true; // we are returning a `bool, right?
}

您还需要致电您的代码:

int main()
{
    me instance_of_me;
    return 0;
}

我建议您查看a good C++ tutorialsome reading material

评论中的问题答案:

  

你能不能告诉我为什么我需要通过引用传递std :: string?

这个问题已经在StackOverflow上被问过(不止一次)。我推荐this answer

  

与我有什么关系?

事后看来,mo是变量名称的可怕选择。 instance_of_me可能是更好的选择。这一行构造了一个me的实例,调用构造函数(后者又调用method("earl")

  

你的意思是我的方法(“你好”);在main()

我当然没有!

您将method声明为private成员函数。因此,不能从课外调用此方法。

答案 2 :(得分:1)

首先,您在:

之后错过了private

其次,如果cpp文件中的method (String name)应该是您班级的method (String name),则必须是:

bool me::method(std::string name)
{
    // ...
}

第三,如果你希望这个bool me::method(std::string name)是一个不同的函数,一个全局函数,而不是你的类,它必须是:

ret_type method(std::string name)
{
    // ...
}

而且,第四,

cout<<"name"<<endl;

将pring字符串(literal)“name”。如果要打印变量name,请在不带引号的情况下使用它:

std::cout<< name <<endl;

我建议您获得book


啊,这一个:

me::me()
{
    method(string name); //can i do this? isn't there another alternative?
}

method(string name) - 这不是有效的语法。它应该是这样的:

me::me()
{
    string name;
    // do something with name
    method( name ); // if "method" is a method, for real
}