我想声明头文件中的函数,向量和结构,以便在main方法中全局使用。
sicxe_asm.h看起来像这样:
#ifndef SICXE_ASM_H
#define SICXE_ASM_H
using namespace std;
#include <string>
#include <sstream>
#include <vector>
class sicxe_asm
{
public:
private:
string filename; // file to be assembled
string validate_hex_address(string str);
string decimal_to_hex(int dec);
int hex_to_decimal(string hexvalue);
bool is_blank_or_comment(vector<string> command);
bool is_decimal(string tempStr);
struct listingFileLine
{
string address;
string label;
string opcode;
string operand;
listingFileLine() : address(""), label(""), opcode(""), operand("") {}
};
vector <listingFileLine> listingFileVec;
};
#endif
在sicxe_asm.cpp中,我使用它们:
string validate_hex_address(string str)
{
if(str.at(0) != '$')
{
throw driver_exception("Invalid START address");
}
str.erase(0,1); // remove the $
return str;
}
string decimal_to_hex(int dec)
{
stringstream ss;
ss << hex << dec;
string hexvalue = ss.str();
return hexvalue;
}
int hex_to_decimal(string hexvalue)
{
stringstream ss;
int decimalvalue;
ss << hexvalue;
ss >> hex >> decimalvalue;
return decimalvalue;
}
bool is_blank_or_comment(vector<string> command)
{
if(command[LABEL] == "" && command[OPCODE] == "" && command[OPERAND] == "")
return true;
return false;
}
bool is_decimal(string tempStr)
{
const char * str = tempStr.c_str();
for(unsigned int i = 0; i <= strlen(str)-1; i++)
{
if(!isdigit(str[i]))
return false;
}
return true;
}
即使我添加像bool sicxe_asm :: is_decimal(string tempStr)这样的作用域样式,当我在main()中调用这些函数时,仍然没有在此作用域中声明。
答案 0 :(得分:1)
首先,这些方法属于私有部分,因此您无法直接调用它们。如果你想在课堂声明之外打电话给他们,请把它们放在公共部分。
其次,.cpp文件中方法的定义(实现)必须是::
,例如:
bool sicxe_asm::is_decimal(string tempStr) { ... }
^^^^^^^^^^^