我想从http://code.google.com/p/enhsim编译以下代码行:
enh::eout << enh::setw(26);
Run Code Online (Sandbox Code Playgroud)
gcc给出以下错误:
error: no match for 'operator<<' in 'enh::eout << enh::setw(26)'
Run Code Online (Sandbox Code Playgroud)
但是这个EnhSimOutput
类(其中enh::eout
是一个实例)确实声明:
EnhSimOutput& operator<< (setw& p);
Run Code Online (Sandbox Code Playgroud)
如果我实现一个按值接受对象的操作版本,这个问题就消失了:
EnhSimOutput& operator<< (setw p);
Run Code Online (Sandbox Code Playgroud)
或者如果我将enh::setw
对象创建为本地对象,即:
enh::setw wValue(26);
enh::eout << wValue;
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么gcc不选择运营商的"按引用"版本开头?
编写此代码的开发人员明确地将其编译,但默认gcc拒绝执行此操作.为什么单独声明为局部变量的对象与本地创建的内联之间存在差异?
在包含文化中立XAML文件,一些文化中性图标和本地化字符串的本地化程序中,如何组织这些不同的资源类型以便全部找到它们?无论我尝试什么安排,我发现我的一种资源类型是无法访问的.
我遇到的问题是:
MainWindow.xaml文件始终构建到en-US附属程序集中.如果UltimateResourceFallbackLocation设置为MainAssembly,它将永远不会找到Window的BAML,并且我在InitializeComponent()调用中得到一个异常.所以我觉得被迫将UltimateResourceFallbackLocation设置为"Satellite".
Resources.resx文件中包含的文化中性图标资源始终构建到主EXE程序集中,如果UltimateResourceFallbackLocation设置为Satellite,则无法找到它们.这似乎与MainWindow.xaml文件的要求完全不兼容.
如果我完全删除UICulture和NeutralResourcesLanguage - 这会强制XAML和RESX数据都构建到MainAssembly中,那么我的特定于文化的字符串不起作用.
问题是:我做错了什么?我应该如何构建项目,以便可以访问这三种类型的资源.
编辑(工作解决方案,但似乎错了):
我设法得到我的文化中立的RESX文件Resources.resx,通过完全复制它来构建Satellite组件,重命名重复的Resources.en-US.resx并将Resources.resx设置为Build Action:None(所以参考资料. resx仅用于生成Resources.Designer.cs文件,但不再将数据插入主EXE程序集中.
该程序现在适用于所有三种情况(本地化字符串,来自resx的非本地化数据和来自XAML的非本地化数据),因为我的所有文化中立资源现在都在en-US程序集中 - 但是将Resources.resx文件复制到实现这一点似乎很傻.
这很傻吗?有更聪明的方法吗?