相关疑难解决方法(0)

964
推荐指数
5
解决办法
11万
查看次数

我对值初始化的尝试被解释为函数声明,为什么不是A a(()); 解决这个问题?

Stack Overflow教给我的很多东西都是所谓的"最令人烦恼的解析",经典地用一条线来证明

A a(B()); //declares a function
Run Code Online (Sandbox Code Playgroud)

虽然这对于大多数人而言,直观地看起来是a类型对象的声明A,将临时B对象作为构造函数参数,它实际上是一个函数a返回的声明A,将一个指针指向一个返回的函数,它B本身不带参数.同样的线

A a(); //declares a function
Run Code Online (Sandbox Code Playgroud)

也属于同一类别,因为它代替一个对象,它声明了一个函数.现在,在第一种情况下,这个问题的通常解决方法是在其周围添加一组额外的括号/括号B(),因为编译器会将其解释为对象的声明

A a((B())); //declares an object
Run Code Online (Sandbox Code Playgroud)

但是,在第二种情况下,执行相同操作会导致编译错误

A a(()); //compile error
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么?是的我非常清楚正确的"解决方法"是将其更改为A a;,但我很想知道()第一个示例中的额外功能是什么,然后在重新应用它时不起作用第二个例子.A a((B()));变通办法是否是写入标准的特定异常?

c++

154
推荐指数
5
解决办法
2万
查看次数

构造函数上没有括号,没有参数是语言标准吗?

我正在使用g ++编译Cygwin中的C++程序,我有一个类,其构造函数没有参数.我有线:

MyClass myObj();
myObj.function1();
Run Code Online (Sandbox Code Playgroud)

当我尝试编译它时,我收到了消息:

error: request for member 'function1' in 'myObj', which is of non-class type 'MyClass ()()'
Run Code Online (Sandbox Code Playgroud)

经过一番研究,我发现修复是将第一行更改为

MyClass myObj;
Run Code Online (Sandbox Code Playgroud)

我可以发誓我之前用C++中的括号做了空构造函数声明.这可能是我正在使用的编译器的限制,还是语言标准真的说不使用括号用于没有参数的构造函数?

c++ standards constructor

49
推荐指数
4
解决办法
3万
查看次数

为什么没有调用构造函数?

此代码的行为与我的预期不符.

#include<iostream>
using namespace std;

class Class
{
    Class()
    {
        cout<<"default constructor called";
    }

    ~Class()
    {
        cout<<"destrutor called";
    }
};

int main()
{    
    Class object();
}
Run Code Online (Sandbox Code Playgroud)

我期望输出'默认构造函数',但我没有看到任何输出.问题是什么?

c++ constructor class most-vexing-parse

20
推荐指数
2
解决办法
1105
查看次数

Visual 2010一直告诉我"错误:表达式必须具有类类型"

好的,我需要一些见解.

我正在学习C++课程,正在开展第二个项目.我正在尝试创建一个选项列表,允许您将字符串向量存储在电子邮件中.

现在在花时间帮助我并查看代码之前我想指出我的问题.我在文件"HughesProject2-1.cpp"中创建了一个对象:

HughesEmail myhughesEmail();
Run Code Online (Sandbox Code Playgroud)

好吧,问题出现在我使用此对象运行displayList()之后:

myHughesEmail.displayList();
Run Code Online (Sandbox Code Playgroud)

Visual 2010一直告诉我"错误:表达式必须具有类类型"

现在我正在使用这本书作为参考,他们以同样的方式创建了一个对象,并在之后以相同的方式使用它.我对我的错误感到困惑,因为我的文件与使用对象的基本知识和正在完成的工作完全不同.我理解其他错误,因为这是不完整的,我还在学习,我需要知道在我制作之后最有可能导致我使用该对象.提前致谢.

我有三个文件:

HughesEmail.cpp

// Classes for HughesProject2-1.cpp and HughesEmail.h

// Includes
#include <string>
#include <iostream>
#include <vector>
#include <iomanip>
#include "HughesEmail.h"

// Namespaces
using namespace std;

// Initializing Constructor
HughesEmail::HughesEmail()
{
    vector< string > emailStorage( 100 );
    emailMinimumLength = 9;
    exitOption = 1;
    emailOption = 1;
}

void HughesEmail::displayList()
{
    // Check if exit is set, if not run.
    if ( exitOption == 1 )
    {
    // Email list options
    cout …
Run Code Online (Sandbox Code Playgroud)

c++ visual-studio-2010

12
推荐指数
1
解决办法
2万
查看次数

为什么括号在初始化空向量时会有所不同?

我无法理解错误.我正在使用一个简单的向量映射(由字符串键入并存储字符串向量):

typedef std::map<std::string, std::vector<std::string> > TRouteMarkets;
Run Code Online (Sandbox Code Playgroud)

以下代码(剥离),

void CFoo::Bar(const char* route, const char* market)
{
    // ...

    TRouteMarkets::key_type key(route);
    TRouteMarkets::mapped_type mapped();
    TRouteMarkets::value_type pair(key, mapped);

    // ...
}
Run Code Online (Sandbox Code Playgroud)

产生以下错误:

"Foo.cc",第518行:错误:无法找到std :: pair <const std :: string,std :: vector <std :: string >> :: pair(const std :: string,std)的匹配项:: vector <std :: string>())在CFoo :: Bar(const char*,const char*)中需要.

但是删除了()映射,

TRouteMarkets::mapped_type mapped;
Run Code Online (Sandbox Code Playgroud)

修复错误.为什么?mapped在任何一种情况下都不是一个空字符串向量?

c++ stl compiler-errors

5
推荐指数
2
解决办法
259
查看次数

CRect c之间有什么区别; 和CRect c(); 什么时候CRect是一个类?

CRect c之间有什么区别; 和CRect c(),当CRect是一个类?

c++

3
推荐指数
2
解决办法
257
查看次数