带有字符串函数的c ++类实现

时间:2014-11-28 00:31:38

标签: c++ class

我需要为我的一个赋值实现一个类,并且该类中的一个函数具有字符串作为数据类型并不起作用

我的定义代码是:

#include <string>  
class expression {
public:
    expression();
    void promptUser();
    int getNum1();
    int getNum2();
    int calculate();
    st::string str;
    string numToString(int num);
    string opToString();

private:
    int num1;
    int num2;
    char op;
};

在我的实施文件中 当我试图明确numTostring

string expression::numToString(int num) {
    string digit;
    ...

它声明声明与头文件(我的类定义)

不兼容

我不知道为什么,因为两个函数标题都是相同的。

expression.cpp(实现文件)的头文件是:

#include "expression1.h"
#include "stdafx.h"
#include <iostream>
#include <string>
#include <cmath>

using namespace std;

3 个答案:

答案 0 :(得分:1)

您的类使用非限定名称string,但在任何封闭范围中没有定义string数据类型。在命名空间std::string中定义了 std 数据类型。这看起来是你需要的类型:

std::string str;
std::string numToString(int num);
std::string opToString();

通过指定std::声明,您可以不必在任何地方输入using

using std::string;

但你可能不想在header file内做到这一点,所以坚持完全限定类型。

答案 1 :(得分:1)

如果你想使用,你需要用std ::

来引用它

例如,表达式类声明:

st::string str;
string numToString(int num);
string opToString();

应该是:

std::string str; // you typed st:: instead of std::
std::string numToString(int num); // lack of std::
std::string opToString(); // lack of std::

如果您不使用2个文件(cpp + h)来定义和声明您的课程,那么您可以添加行

using namespace std;

在你的包含之后。这样你每次尝试引用字符串和类似类型时都不必输入std ::。但是,使用它通常被称为糟糕的“初学者”练习。

如果你确实使用了cpp + h,那么只需在每个字符串类型之前添加std ::并使用namespace std添加;你的cpp文件。

如果您想了解更多信息,请阅读:
1. http://www.cplusplus.com/doc/tutorial/namespaces/
2. Why is "using namespace std" considered bad practice?
3. How do you properly use namespaces in C++?

答案 2 :(得分:0)

您还需要移动

#include "stdafx.h"

这是第一个包含的标题。编译器会忽略该魔术线之前的所有内容。