小编Pro*_*123的帖子

由于MSVCR100D.dll缺失,无法在调试模式下编译解决方案

我在带有Windows 8的64位计算机上运行Microsoft Visual Studio Express 2012 for Windows Desktop.

我创建了一个全新的Win32控制台应用程序(在C++中)并接受默认选项.然后,我在调试和发布模式下构建并运行解决方案,它可以运行所有查找和花花公子.接下来,我为动态 SFML库配置include和library目录.我链接到调试和发布.lib文件,并将调试和发布.dll文件放在正确的目录中.然后我添加了一些使用库的简单代码,在调试模式下构建和运行应用程序,我得到了这个错误:" The program can't start because MSVCR100D.dll is missing from your computer. Try reinstalling the program to fix this problem."如果我在发布模式下构建并运行应用程序,它可以正常工作,没有错误.(是的,我有redistributables安装了32位和64位.)现在根据我的理解,根据这个线程,.dll文件仅用于调试,并且不包含在可再发行组件包中(这可以解释为什么它不起作用)在调试模式下).答案是开发人员默认使用visual studio安装它.这显然不是错误的证据,我重新安装了visual studio并重新启动了我的计算机两次.

总之,如何在调试模式下编译我的解决方案而不会出现此错误?

我担心有人会将此标记为副本,所以我们开始:

  1. 链接 - "......您似乎链接到运行时的调试版本,分发与运行时调试版本链接的应用程序是不正常的."

    不属于我,因为我没有分发这个应用程序,只是尝试在调试模式下运行它.

  2. 链接 - "我使用Microsoft visual c ++ 2010 Express Edition编译了我的程序,并尝试在另一台没有相同编译器的机器上运行它."

    当他在另一台计算机上运行他编译的内容时,这个人会得到错误,而不是在实际编译应用程序时.

  3. 链接 - "如果您的发布版本出现此错误......"

    我不.

  4. 链接 - "您可以在"发布"中编译您的项目..."

    我的项目还没有准备好发布,因此我应该在调试模式下编译我的项目.

c++ debugging compiler-errors visual-studio-2012

9
推荐指数
1
解决办法
4876
查看次数

将Object转换为std :: unique_ptr

我有一个简单的菜鸟问题,我无法找到答案:

在C++中,如何转换常规对象

int i;
Run Code Online (Sandbox Code Playgroud)

变成了std::unique_ptr

std::unique_ptr<int> iptr = &i; //invalid
std::unique_ptr<int> iptr = static_cast<std::unique_ptr<int>>(&i); //invalid
Run Code Online (Sandbox Code Playgroud)

谢谢.

c++ pointers type-conversion

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

从带有原始指针的向量中删除std :: unique_ptr的最佳方法是什么?

所以我有一个这样的矢量:

std::vector<std::unique_ptr<SomeClass>> myVector;
Run Code Online (Sandbox Code Playgroud)

然后我有另一个包含原始指针的向量SomeClass:

std::vector<SomeClass*> myOtherVector;
Run Code Online (Sandbox Code Playgroud)

如果里面有一个元素,myOtherVector它也会在里面myVector,所以我想遍历每个元素myOtherVector并从中删除相同的元素myVector.然后清除矢量.这就是我想出的:

for(size_t i = 0; i < myOtherVector.size(); i++)
{
    myVector.erase(std::remove(myVector.begin(), myVector.end(), myOtherVector[i]), myVector.end());
}
myOtherVector.clear();
Run Code Online (Sandbox Code Playgroud)

这会产生编译时错误,因为它myVector保存了唯一的指针,但我给remove()函数一个原始指针.这是我需要帮助的地方,因为我不知道解决这个问题的正确方法是什么.我把线改为:

myVector.erase(std::remove(myVector.begin(), myVector.end(), std::unique_ptr<SomeClass>(myOtherVector[i])), myVector.end());
Run Code Online (Sandbox Code Playgroud)

所有这一切都是不正确的,因为现在我有两个std::unique_ptr引用相同的对象.里面的元素myVector包含一个引用,上面一行中唯一指针的构造是另一个引用.我甚至不知道构造一个新的指针来获得相同类型在概念上是否正确的方法去做这件事.然后我将唯一指针更改为共享指针:

std::vector<std::shared_ptr<SomeClass>> myVector;
std::vector<SomeClass*> myOtherVector;

for(size_t i = 0; i < myOtherVector.size(); i++)
{
    myVector.erase(std::remove(myVector.begin(), myVector.end(), std::shared_ptr<SomeClass>(myOtherVector[i])), myVector.end());
}
myOtherVector.clear();
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序时,该myVector.erase()行导致运行时错误,表示"ApplicationName.exe已触发断点".点击继续,我得到一个调试断言失败.

显然我做错了什么,但我不知道是什么.使用原始指针从矢量中擦除智能指针的正确方法是什么?

c++ smart-pointers std stdvector

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

用于动态分配智能指针的2D数组的语法

我需要动态分配一个二维智能指针数组,但它的语法让我感到困惑.我需要这个是动态的:

std::unique_ptr<someClass> myArray[size1][size2];
Run Code Online (Sandbox Code Playgroud)

所以根据我的理解,我创建了一个指向该类型指针的指针:

someClass** myArray; //actaully the type is std::unique_ptr<someClass> but I'll just keep it simple
Run Code Online (Sandbox Code Playgroud)

然后分配它我做:

myArray* = new someClass*[size1];
for(int i = 0; i < size1; i++)
    myArray[i] = new someClass[size2];
Run Code Online (Sandbox Code Playgroud)

但这不使用智能指针,这意味着我将不得不在以后手动删除它,我不知道如何使这些指针智能指针;

类型是std :: unique_ptr但是我需要一个指向该类型的指针,所以我试过:

std::unique_ptr<std::unique_ptr<std::unique_ptr<someClass>>> myArray;
Run Code Online (Sandbox Code Playgroud)

但在此之后我就失去了如何分配它.有人可以帮帮我吗?

c++ arrays memory-management smart-pointers multidimensional-array

5
推荐指数
1
解决办法
4131
查看次数

何时分配类型?

所以,我最近一直在学习C#,但有一点我无法弄清楚或找到答案:

考虑一下:

class Class1 {
    int myInt = 32;
}
Run Code Online (Sandbox Code Playgroud)

还有这个:

class Class1 {
    int myInt;

    public Class1(){
        myInt = 32;
    }
}
Run Code Online (Sandbox Code Playgroud)

我只想知道何时以及为什么我应该使用一种方法来分配或实例化值.

c#

3
推荐指数
1
解决办法
191
查看次数

将代码转换为C#

我正在调查随机数生成器并找到一个伪代码:

function Noise1(integer x)
    x = (x<<13) ^ x;
    return ( 1.0 - ( (x * (x * x * 15731 + 789221) + 1376312589) & 7fffffff) / 1073741824.0);    
end function
Run Code Online (Sandbox Code Playgroud)

我想把它转换成C#但我得到各种错误,如无效表达式和")"预期.这是我到目前为止如何转换它?

double Noise(int x) {
    x = (x<<13) ^ x;
    return ( 1.0 - ((x * (x * x * 15731 + 789221) + 1376312589) & 7fffffff) / 1073741824.0);
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

c#

0
推荐指数
1
解决办法
264
查看次数