在头文件中声明时未在范围中声明?

时间:2014-03-21 20:27:35

标签: c++ scope header-files

我想声明头文件中的函数,向量和结构,以便在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()中调用这些函数时,仍然没有在此作用域中声明。

1 个答案:

答案 0 :(得分:1)

首先,这些方法属于私有部分,因此您无法直接调用它们。如果你想在课堂声明之外打电话给他们,请把它们放在公共部分。

其次,.cpp文件中方法的定义(实现)必须是::,例如:

bool sicxe_asm::is_decimal(string tempStr) { ... }
     ^^^^^^^^^^^