我有一个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.请参阅下面的答案.
我已经仔细研究了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成功地结合既 …
我们正在寻找设置本地git服务器的最佳解决方案.我们的愿望清单是
我们正在考虑的解决方案
有什么建议?
我知道一般来说,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 …
我在 Xcode 中有一个工作区,大约有 10 个方案。
每当我第一次克隆存储库并从新克隆的存储库打开 Xcode 工作区时,选择的方案始终是我第一次开发 Xcode 工作区时创建的第一个方案。从那以后,我添加了大约 9 个额外的方案。
我希望在首次从新克隆的存储库中打开 Xcode 项目时选择的默认方案是不同的方案。
请注意,尽管标题很有希望,但为 Xcode 项目设置默认方案并没有回答这个问题。我在其他任何地方都找不到这个问题的提问或回答。
如何在 Xcode 项目中设置默认方案?
在我尝试回答我自己的问题时,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 版本中生效?
在研究维基百科中的单一定义规则时,我陷入了示例部分中的以下示例:
struct S; // declaration of S
...
S f(); // ok, no definition required
...
Run Code Online (Sandbox Code Playgroud)
我知道需要为返回值分配堆栈上的空间,但是看到这个示例让我认为 C++ 调用约定可能规定返回值的堆栈管理由定义函数的代码块处理,而不是由比调用它的代码块。因此,我研究了“C 与 C++ 调用约定”(回想一下堆栈返回值分配问题可能是主要区别),并发现了这个答案,这表明标准未定义“调用约定”。
然而,考虑到上述代码片段有效的明显要求,在我看来,为了支持上述代码片段,调用约定必须有一些限制。
我对吗?C++ 标准是否隐式要求函数返回值的堆栈管理由定义函数的代码处理,以便支持上述语法?
我试图通过想象奥术结构来更全面地掌握模板语法和语义.我相信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标准不允许显示的语法?如果是这样,哪里可以发现不允许语法?
附录我自己的初步答案出现在问题的底部。
我是一个古老的VC6 C ++ / MFC项目转换为VS2013和Unicode的基础上,建议在utf8everywhere.org。
一路上,我一直在研究 Unicode、UTF-16、UCS-2、UTF-8、Unicode 和 UTF-8 的标准库和 STL 支持(或者,更确切地说,标准库缺乏支持)、ICU、Boost .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 上。 而且,对于上面的代码片段,我也对编译时发生的情况与运行时 …
有各种相关问题提示如何将新的 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++ …