相关疑难解决方法(0)

常量对象和函数的麻烦

我正在尝试学习如何使用常量函数和对象,但是,我有一些错误使我保持了一个多小时,我似乎无法弄明白.我跟着一个简单的例子,我想我在路上的某个地方迷路了.这是我的代码.

Main.cpp的

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

int main(){
    ExampleClass exampleObj; // object used to call members of ExampleClass.
    exampleObj.printText(); // calls printVar from the ExampleClass.

    const ExampleClass constantObject; // object used to call constant members of ExampleClass.
    constantObject.printConstText(); // calls printConstVar from the ExampleClass.

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

ExampleClass.h

#ifndef EXAMPLECLASS_H
#define EXAMPLECLASS_H


class ExampleClass
{
    public:
        void printText();
        void printConstText() const;
};

#endif // EXAMPLECLASS_H
Run Code Online (Sandbox Code Playgroud)

ExampleClass.cpp

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

void ExampleClass::printText(){
    std::cout << "The code works!" << "\n";
} …
Run Code Online (Sandbox Code Playgroud)

c++ const

8
推荐指数
2
解决办法
209
查看次数

在C++中转换为VARIANT类型的简单方法

是否有任何易于使用的,高层次的类或库,让你互动VARIANT的可视化(C S)++?

更具体地讲,我想POD类型(例如之间的转换double,long),字符串(如CString),和容器(如std::vector)和VARIANT秒.例如:

long val = 42;
VARIANT var;
if (ToVariant(val, var)) ...     // tries to convert long -> VARIANT
comObjPtr->someFunc(var);

std::vector<double> vec;
VARIANT var = comObjPtr->otherFunc();
if (FromVariant(var, vec)) ...   // tries VARIANT -> std::vector<double>
Run Code Online (Sandbox Code Playgroud)

我(天真地?)假设与COM一起工作的人一直这样做,所以最有可能是一个方便的库来处理各种转换.但是我能找到的所有内容都是各种各样的包装类,每个类都转换为几种类型:

有没有简单的方法 - 没有切换到Visual Basic - 以避免这种笨拙的内存管理和按位VT_ARRAY | VT_I4代码的噩梦?

相关问题: …

windows variant visual-c++

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

那么现在struct可以有虚函数和支持继承吗?那么班级有什么不同?信息隐藏的真正目的是什么?

可能重复:
C++中struct和class之间有什么区别

http://www.cplusplus.com/reference/std/typeinfo/type_info/

我想我的"老师"并没有告诉我很多关于C++中struct和classes之间的区别.

我在其他一些问题中读到有关继承的问题,结构默认是公共的...我也猜测struct没有构造函数/析构函数...

那么其他的差异呢?他们这么重要吗?

在谈到私有/受保护的属性/方法时,它们在运行时是不可访问的,只是因为编译器在编译时告诉它并报告错误,对吧?然后将这些功能与类进行比较,"信息隐藏"真正为程序员带来了什么?是否在这里,当有人重用该类时,这个人不会滥用该类,因为编译器会报告私有/受保护的东西?

我仍然为信息隐藏的真正目的而苦苦挣扎,它仍然希望在我的脑海中发出声音,因为它为程序带来更多安全性,意味着更少的安全漏洞,但我真的很困惑这种设计在语言中的目标...... (而且我不打算以任何方式反对C++,我只是想了解在什么情况下这个功能可能有趣或不;如果不是,那不是问题,但我只是想知道...).

c++ inheritance struct information-hiding class

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

所有私人成员的班级都可以成为POD班级吗?

我之前听说POD类型不能拥有私有数据 - 但根据C++ 0x草案,我的要求是宽松的(强调我的):

对所有非静态数据成员具有相同的访问控制(第11条)

这似乎暗示私人数据是好的,只要它都是私有的.我没有C++ 03的副本但是要查看...

那么,WindowsApi::Uuid是POD课吗?

namespace WindowsApi
{
    class Uuid
    {
        union
        {
            ::UUID asUuid; //Win32's UUID struct
            unsigned __int64 asInt64s[2];
            unsigned __int32 asInt32s[4];
        };
    public:
        Uuid() {}
        Uuid(::UUID sourceStructure) : asUuid(sourceStructure) {}
        operator ::UUID() { return asUuid; }
    };
}
Run Code Online (Sandbox Code Playgroud)

c++ pod

7
推荐指数
2
解决办法
1830
查看次数

从dll中的函数返回时堆损坏

我有一个原型函数,如下所示:

void function(std::string str);
Run Code Online (Sandbox Code Playgroud)

我的main函数在另一个加载和使用该dll的程序中调用此函数.

function("some string value here");
Run Code Online (Sandbox Code Playgroud)

从这个函数返回时,我得到堆损坏错误:

Windows已在program.exe中触发断点.

这可能是由于堆的损坏,这表示program.exe或它已加载的任何DLL中的错误.

这也可能是因为用户在program.exe具有焦点时按下F12.

输出窗口可能包含更多诊断信息.

玩弄我的代码我发现了一些奇怪的观察结果:
1.当传入的字符串长度小于11个字符时,我没有错误,只要我添加更多字符就会出现错误.
2.当从改变参数的类型std::stringstd::string&错误消失.传递参考的想法来自这里.
我已经注释掉了这个功能的主体.那里的操作与产生的异常无关.
4.更改参数类型从std::stringchar*也解决了这个问题.
可能导致此错误的原因是什么?我该如何解决?

c++ dll exception-handling heap-corruption

7
推荐指数
3
解决办法
6924
查看次数

Visual Studio 2008中的POD

以下代码

#include <iostream>
#include <new>
#include <cstring>
#include <type_traits>

template<typename T>
void is_pod(char* c)
{
    cout << "Type " << c;
    if(std::is_pod<T>::value)
        ::std::cout << " is POD" << endl;
    else
        ::std::cout << " is not!" << endl;
}

#define CHECK_TYPE(ty) ::is_pod<ty>(#ty)

struct POD_Parent{};
struct POD_Child : public POD_Parent{int y;};
struct POD_Child2 {int x; POD_Parent y; POD_Child ssd;};

int main()
{
    CHECK_TYPE(POD_Parent);
    CHECK_TYPE(POD_Child);
    CHECK_TYPE(POD_Child2);
Run Code Online (Sandbox Code Playgroud)

给出以下结果:哪个很奇怪!

Type POD_Parent is POD
Type POD_Child is not!
Type POD_Child2 is POD
Run Code Online (Sandbox Code Playgroud)

POD_Child怎么不是POD?!和POD_Child2是POD?!!

请注意,我使用MinGW编译它(使用选项-std = c …

c++ pod visual-studio-2008

7
推荐指数
1
解决办法
168
查看次数

C++中的"非指针POD"类型

是否有一个类/结构的术语既是平凡的布局又是标准布局,但也没有指针成员?

基本上我想引用"真正的"普通旧数据类型.我可以从内存中获取并存储在磁盘上的数据,并将其读回内存以供以后处理,因为它只不过是一组int,字符,枚举等.

如果类型是"真正的"普通旧数据类型,有没有办法在编译时进行测试?

相关:
C++中的POD类型是什么?
什么是聚合和POD以及它们如何/为何特殊?

c++ types

7
推荐指数
1
解决办法
282
查看次数

按变量值访问struct属性

我的课程中有4个属性的结构"边距".我没有写出四种不同的getter/setter方法,而是认为我可以用更好的方式做到:

class myClass {
    private:
        struct margin {
            int bottom;
            int left;
            int right;
            int top;
        }
    public:
        struct getMargin();
        void setMargin(string which, int value);
};
Run Code Online (Sandbox Code Playgroud)

但是如何在函数中设置与字符串"which"对应的struct的属性setMargin()?例如,如果我打电话myClass::setMargin("left", 3),我怎么能将"margin.left"设置为"3"?最好在保持结构POD的同时?我真的无法弄清楚这一点......

从旁注来看,这真的比编写许多getter/setter方法更好吗?

谢谢!

c++ struct getter-setter

6
推荐指数
1
解决办法
6190
查看次数

为了确保C ++类型为POD,必须遵循哪些规则?

可能重复:
C ++中的POD类型是什么?

什么是聚合和POD,它们为何/为什么特别?

我正在用C ++写一个解释器,我想确保某些C ++数据类型在通过解释的代码访问时(尤其是在使用反射时)具有可预测的布局。因此,例如,我想确保第一个数据字段始终与对象地址的偏移量为零。现在,这对于纯POD类型来说是微不足道的。但是,我想知道这是否还可以用于具有继承或构造函数的对象,只要我避免使用虚函数或多重继承之类的明显东西即可。是否合理地假设编译器将以与C编译器相同的方式布局这些类型,还是我需要担心C ++标准中的“未指定行为”?

c++ compiler-construction standards inheritance pod

6
推荐指数
1
解决办法
329
查看次数

是不是提供了明确的析构函数不好的做法?

如果我没有为C++类提供显式的析构函数,因为我确信编译器提供的默认析构函数是我所有类的需求,那很好吗?或者这被认为是不好的做法?

c++ destructor

6
推荐指数
2
解决办法
2621
查看次数