小编Dan*_*aum的帖子

在VS 2008中调用_osfile()的CRT中的断言错误?

我有一个C++代码库已经工作了很长时间.代码库是我最近迁移到VS 2008的遗留VS 2003项目集.迁移似乎是成功的,因为生成并运行了生成的程序.

我在新驱动器上重新安装了我的操作系统和所有应用程序,现在当我尝试在调试器中调试程序时,我在CRT内部收到一个断言错误chsize(真的,_chsize_s).具体而言(裁剪为必需品,忽略安全检查):

FILE * testfile = fopen("P:\\_Dan\\local\\foogoo.txt", "w");
int filehandle = fileno(testfile);
chsize(filehandle, 0);
fwrite("goohoo", 1, 6, testfile);
fclose(testfile);
Run Code Online (Sandbox Code Playgroud)

调试断言发生在chsize- 特别是在CRT的源代码文件chsize.c中,位于以下行:

 _VALIDATE_CLEAR_OSSERR_RETURN_ERRCODE((_osfile(filedes) & FOPEN), EBADF);
Run Code Online (Sandbox Code Playgroud)

......哪里filedes比赛filehandle.

我想可能问题可能是因为没有在新系统上安装旧版本的VS(仅限VS 2008),因为一些第三方库需要VS 8.0可再发行 - 即使在旧系统上似乎正在构建和运行使用VS 2008就好了.因此我安装了VS 2005(而非2003).但是,问题仍然存在.

任何建议都会受到极大的欢迎.

*更新 - 问题与此无关chsize.请参阅下面的答案.

c++ crt msvcrt visual-studio-2008 visual-studio

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

什么是xvalue和prvalue之间在重载分辨率方面的行为差异的一个具体,简明的例子?

我已经仔细研究了rvalues和rvalue引用,详细研究了几个星期.我越来越相信我能清楚地了解它们之间的区别:

  • 用于定义变量或函数参数的类型(即int x;vs.int && x = ...;
  • 表达类表达式,包括那些可使用先前定义的参数(即,给定的函数定义A&& foo(),以及给定的仅由一个表达式foo(),所述表达式类别是"x值")
  • 当在包含表达式中使用该表达式时子表达式的评估结果的类型(即,给定相同的定义foo,在包含表达式中使用时子表达式的类型foo()A(非A&&)).

我的问题是关于xvalue表达式和prvalue表达式之间的区别(这两个表达式类别都是rvalues).

鉴于:

class A
{};

A&& foo() {...}
A goo() {...}

void test(A&& a) {...}

int main()
{
    test(foo()); // test() called with xvalue expression
    test(goo()); // test() called with prvalue expression
}
Run Code Online (Sandbox Code Playgroud)

请注意,test()使用xvalue表达式和prvalue表达式成功调用该函数.(如果我对此有误解,请纠正我.)

我的问题是:由于函数的参数A&& a,以test成功地结合既 …

c++ c++11

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

在Windows和活动目录上使用什么git服务器解决方案?

我们正在寻找设置本地git服务器的最佳解决方案.我们的愿望清单是

  • 在Windows Server 2008R2上运行
  • 小团队 - 不到十个开发人员
  • 易于设置
  • 使用方便
  • 用户的活动目录身份验证
  • 强大的
  • web gui会很好
  • 免费会很好

我们正在考虑的解决方案

  • gitosis看起来很麻烦,没有web gui
  • 在Windows文件共享上裸git - 看起来很简单但当然没有web gui
  • gitstack看起来不错,但不是免费的

有什么建议?

windows git version-control active-directory gitstack

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

如果 QObject 是从 DIRECTLY 派生的,使用 *virtual* 多重继承是否安全?

我知道一般来说,Qt 不支持从 -QObject派生类(甚至虚拟多重继承)的多重继承。

我理解原因是(我认为)即使在虚拟继承的情况下,Qt 类本身也不会从QObject. 例如,如果您尝试从QWidget和虚拟派生一个类QThread,这会将虚拟继承放在继承链中不相关的位置,并且您仍然会得到两个QObject实例。

因此,我认为使用虚拟继承是安全的,并且在 Qt 中得到支持,其中唯一派生的 Qt 类是QObject它本身。

我有:

class Top : public QObject {};

class Left : public virtual Top {};

class Right : public virtual Top {};

class Bottom : public Left, public Right {}; // Is this safe, and supported by Qt?
Run Code Online (Sandbox Code Playgroud)

请注意,Bottom真正的实例只有一个实例Top(因此只有一个实例QObject),因此似乎在 Qt 中避免多重继承(甚至虚拟多重继承)的基本原理在这里并不适用。

尽管如此,上述构造仍会导致 Qt 编译器警告Class Bottom …

c++ qt multiple-inheritance

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

如何在 Xcode 中为工作区设置默认方案?

我在 Xcode 中有一个工作区,大约有 10 个方案。

每当我第一次克隆存储库并从新克隆的存储库打开 Xcode 工作区时,选择的方案始终是我第一次开发 Xcode 工作区时创建的第一个方案。从那以后,我添加了大约 9 个额外的方案。

我希望在首次从新克隆的存储库中打开 Xcode 项目时选择的默认方案是不同的方案。

请注意,尽管标题很有希望,但为 Xcode 项目设置默认方案并没有回答这个问题。我在其他任何地方都找不到这个问题的提问或回答。

如何在 Xcode 项目中设置默认方案?

xcode

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

Boost:为什么 ~/user-config.jam 中列出的工具集不可用于 ./b2?

在我尝试回答我自己的问题时,Clang 链接器报告“未找到符号”,尽管“nm -m”显示该名称存在于正在链接的库中,但我发现了一些链接,表明我必须在操作系统上构建 Boost X 以便它显式使用 Clang 并链接到libc++ 此处此处此处

按照指示的步骤(借助额外的谷歌搜索来协助/确认编辑过程user-config.jam,将其放入我的主目录以及其他必要的步骤),我已将以下几行添加到我的~/user-config.jam文件中:

using clanglibcpp : 11
    : "/usr/bin/clang++"
    : <cxxflags>"-std=c++11 -stdlib=libc++" <linkflags>"-stdlib=libc++"
    ;
Run Code Online (Sandbox Code Playgroud)

./b2然后我从目录运行$BOOST_ROOT

./b2 toolset=clanglibcpp-11 --with-filesystem variant=release link=static threading=multi

不幸的是,无论我做什么,我都会收到以下错误:

ERROR: rule "clanglibcpp.init" unknown in module "toolset"

我已经确认/usr/bin/clang++存在于指示的路径中(确实如此)。我也尝试将以上几行添加到$BOOST_ROOT/tools/build/v2/user-config.jam(没有运气)。我还尝试./bootstrap.sh从 boost 根目录运行,以及运行./b2 --clean. 没有运气。

我应该怎么做才能真正让工具集user-config.jam在 OS X 上的 Boost 版本中生效?

c++ macos boost

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

C++ 调用约定是否受到标准的约束,因为在声明 fn 时不需要定义函数的返回类型?

在研究维基百科中的单一定义规则时,我陷入了示例部分中的以下示例:

struct S;     // declaration of S
...
S f();        // ok, no definition required
...
Run Code Online (Sandbox Code Playgroud)

我知道需要为返回值分配堆栈上的空间,但是看到这个示例让我认为 C++ 调用约定可能规定返回值的堆栈管理由定义函数的代码块处理,而不是由比调用它的代码块。因此,我研究了“C 与 C++ 调用约定”(回想一下堆栈返回值分配问题可能是主要区别),并发现了这个答案,这表明标准未定义“调用约定”。

然而,考虑到上述代码片段有效的明显要求,在我看来,为了支持上述代码片段,调用约定必须有一些限制。

我对吗?C++ 标准是否隐式要求函数返回值的堆栈管理由定义函数的代码处理,以便支持上述语法?

c++ return-type return-value

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

在C++ 11标准中它禁止'template <typename T> class A {...}; template <typename T> class A <int> {...};' (如果有的话)?

我试图通过想象奥术结构来更全面地掌握模板语法和语义.我相信C++ 11标准不允许使用以下语法:

template <typename T>
class A
{...};

// phony "specialization"
template <typename T>
class A<int>
{...};
Run Code Online (Sandbox Code Playgroud)

但是,我无法在C++ 11标准中找到不允许使用此语法的内容.

我是否正确C++ 11标准不允许显示的语法?如果是这样,哪里可以发现不允许语法?

c++ templates language-lawyer c++11

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

传递字符串文字时,多字节到宽字符串的转换函数“mbstowcs”是否使用源文件的编码?

附录我自己的初步答案出现在问题的底部。


我是一个古老的VC6 C ++ / MFC项目转换为VS2013和Unicode的基础上,建议在utf8everywhere.org

一路上,我一直在研究 Unicode、UTF-16、UCS-2、UTF-8、Unicode 和 UTF-8 的标准库和 STL 支持(或者,更确切地说,标准库缺乏支持)、ICUBoost .Locale,当然还有需要 UTF-16 的 Windows SDK 和 MFC 的 API wchar

在我研究上述问题的过程中,一个问题不断出现,我无法以清晰的方式回答我满意的问题。

考虑 C 库函数mbstowcs。此函数具有以下签名:

size_t mbstowcs (wchar_t* dest, const char* src, size_t max);
Run Code Online (Sandbox Code Playgroud)

第二个参数src是(根据文档)a

带有要解释的多字节字符的 C 字符串。多字节序列应从初始移位状态开始。

我的问题是关于这个多字节字符串。我的理解是多字节字符串的编码可能因字符串而异,并且标准未指定编码。MSVC 文档似乎也没有为此函数指定特定的编码。

我此时的理解是,在 Windows 上,这个多字节字符串应该使用活动语言环境的 ANSI 代码页进行编码。但我的清晰度在这一点上开始消退。

我一直想知道源代码文件本身的编码是否会对的行为产生影响mbstowcs,至少在 Windows 上。 而且,对于上面的代码片段,我也对编译时发生的情况与运行时 …

c++ windows encoding utf-8 visual-studio-2013

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

如何在 Visual Studio 的 C++/WinRT 中添加新的 XAML“页面”及其关联的代码隐藏文件?

有各种相关问题提示如何将新的 XAMLPage正确添加到 Visual Studio 中的 WinRT/C++ 项目,但没有一个特定于 C++/WinRT。(即,这里这里,和这里。)

此外,尽管 WinRT/C++ 比 C++/CX 有了很大的改进(在我看来),但几乎所有 Microsoft 文档都使用 C# 或 C++/CX 作为示例。

更糟糕的是,截至本文发布之日,当您使用 Visual Studio 中的“添加项”功能添加 XAML 时Page,它会使用 C++/CX 创建页面,即使对于 WinRT/C++ 项目也是如此。

最后,(截至目前)Microsoft 没有提供有关如何将新 XAML 添加Page到 WinRT/C++ 项目的文档,至少我可以找到(请参阅第一段)。

啊。

为了节省其他人的时间,我将提示拼凑在一起,并成功地将新的 XAML 正确添加Page到 Visual Studio WinRT/C++ 项目中。

我正在询问并回答以下问题:如何将新的 XAML 添加Page到 Visual Studio 中的 WinRT/C++ 项目?


附录

我错过了显而易见的事情!事实证明,您可以使用 Visual Studio 轻松添加 WinRT/C++ …

xaml visual-studio winrt-xaml c++-winrt

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