在c ++中返回字符错误数组?

时间:2013-12-12 16:59:54

标签: c++

除了 main.cpp 之外,我的程序代码中有这两个文件 table.cpp table.h 。文件描述如下

table.cpp

#include <iostream>
#include "table.h"

using namespace std;

// accessor function for Name
char* PeriodicTable::Name()
{
    return Name;
}

// accessor function for Symbol
char* PeriodicTable::Symbol()
{
    return Symbol;
}

table.h

#ifndef TABLE_H
#define TABLE_H

class PeriodicTable
{
    char Name[15], Symbol[3], GroupName[20], Block, State[25], Colour[15], Classification[20];
    int GroupNo, AtomicNo, PeriodNo;
    float Weight;

public:

    char* Name();
    char* Symbol();


};

#endif

但问题是IntelliSense(因为我使用的是Visual C ++ Express 2010)在名称符号红色弯曲下划线 >在 table.cpp 中的访问者函数中。我不明白为什么???

1 个答案:

答案 0 :(得分:4)

您的成员函数和成员变量具有相同的名称。这在C ++中是不可能的。这就是为什么存在命名成员变量的各种约定的原因,例如: m_namename_等。(注意:在处理标识符中的下划线时,请确保您不会意外使用保留名称。)

您可能想知道为什么以及如何可能出错。在您的示例中,显然无法在operator()上调用char[15],但问题是编译器在执行语义分析后才知道。也有可能出现无法消除歧义的情况。例如:

struct Func {
  void operator()() { };
};

struct C {
  Func f;
  void f() {}
};

int main() {
  C c;
  c.f(); // which one?
}