Intellisense 说错误:成员“Class::field”无法访问,但它仍然有效?为啥?

Posted

技术标签:

【中文标题】Intellisense 说错误:成员“Class::field”无法访问,但它仍然有效?为啥?【英文标题】:Intellisense said error: member "Class::field" is inaccessible but it's still works? Why?Intellisense 说错误:成员“Class::field”无法访问,但它仍然有效?为什么? 【发布时间】:2015-02-21 20:11:00 【问题描述】:

我在 main.cpp 的单独文件中有一个类,它重载插入运算符。我的课是这样写的:

人.h

#ifndef PERSON_H_INCLUDED
#define PERSON_H_INCLUDED

#include <iostream>

class Person
        friend std::ostream& operator<<(std::ostream&, const Person&);
    public:
        Person(std::string);
    protected:
        std::string name;
;

#endif

Person.cpp

#include "Person.h"

using namespace std;

Person::Person(string name)
    this->name = name;


ostream& operator<<(ostream& out, const Person& person)
    out << "Name\t:" << person.name << "\n";    // Here's intellisense said error.
    return out;

就在person.name Intellisense 说错误。我的观点是:

为什么它说错误,但我的代码仍然可以正常运行和构建? 是错误还是我做错了什么?

(我使用的是 Visual Studio 2010)

【问题讨论】:

智能感知错误不一定是编译器错误。 Intellisense 是一个单独的编译器,可以部分编译您的代码,以帮助在 Visual Studio IDE 中创建完成。 那么,可以忽略这种错误吗? 是的。可能它完全不知道friend 当我尝试使用 sn-ps 时,我确实看到某些东西以一种非常令人讨厌的方式爆炸。确保您的 .cpp 文件包含 #include &lt;string&gt; 【参考方案1】:

您的代码应该可以正常工作!

这是一个错误的错误,尝试一个干净的构建,如果它仍然存在则忽略它并检查 Visual Studio 更新。

【讨论】:

以上是关于Intellisense 说错误:成员“Class::field”无法访问,但它仍然有效?为啥?的主要内容,如果未能解决你的问题,请参考以下文章

mfc视类中错误:IntelliSense: declaration is incompatible with。。。解决方案

IntelliSense:“没有可用的附加信息”,[请参见“C++项目 IntelliSense 疑难解答”,获得进一步的帮助]

Microsoft Visual Studio 2012 RC C++ IntelliSense 错误

Visual Studio 2013 C++ IntelliSense 显示建议,但不会通过按任何成员列表提交字符来提交它们

停止 Intellisense 显示超时

如何从 IntelliSense 隐藏公共方法