除了 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 中的访问者函数中。我不明白为什么???
答案 0 :(得分:4)
您的成员函数和成员变量具有相同的名称。这在C ++中是不可能的。这就是为什么存在命名成员变量的各种约定的原因,例如: m_name
,name_
等。(注意:在处理标识符中的下划线时,请确保您不会意外使用保留名称。)
您可能想知道为什么以及如何可能出错。在您的示例中,显然无法在operator()
上调用char[15]
,但问题是编译器在执行语义分析后才知道。也有可能出现无法消除歧义的情况。例如:
struct Func {
void operator()() { };
};
struct C {
Func f;
void f() {}
};
int main() {
C c;
c.f(); // which one?
}