我需要为我的一个赋值实现一个类,并且该类中的一个函数具有字符串作为数据类型并不起作用
我的定义代码是:
#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;
答案 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"
这是第一个包含的标题。编译器会忽略该魔术线之前的所有内容。