小编Rog*_*son的帖子

声明朋友时必须声明一个类键

当我声明一个朋友时,g ++编译器会抱怨这个错误:

friend MyClass;
Run Code Online (Sandbox Code Playgroud)

代替

friend class MyClass;
Run Code Online (Sandbox Code Playgroud)

为什么要使用class关键字?(Borland C++编译器,BTW,不需要它.)

难道编译器不能简单地在符号表中查找MyClass并告诉它被声明为一个类吗?(显然它正在进行查找,因为它在没有声明MyClass时会抱怨)

它不像是在进行类的前向声明:我仍然必须要么声明上面的类,要么至少要向前声明它.

这对我来说是有道理的(实际上会很棒)

friend class MyClass;
Run Code Online (Sandbox Code Playgroud)

如果需要,我会做出前瞻性声明,否则它对我来说就像是语法上的盐.

我已经愉快地使用没有classstruct关键字的friend语句,近20年没有编译器投诉.这是一个相当新的东西吗?

c++ friend

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

将非托管C++ DLL与托管C++类库DLL链接

创建简单的c ++ .net包装器的问题中.一步步

我想在.NET中使用C++类,但我在使用Visual Studio(2008)构建时遇到了问题.

我有一个非托管类A(使用/ clr编译的C++).我创建了一个C++/clr类'Class1',它将A和匹配的方法委托包装到A的方法中.

如果我在Class1(托管)的类库项目中包含A类的单元源文件我没有问题所有链接和工作正常,但我有很多非管理的C++类,如A和我想把它们放在DLL中并链接到DLL到托管库(类包装器).[我实际上并不认为此时需要将这些DLL链接在一起,但编译器似乎需要它,给出下面显示的相同错误.]

我创建了VisualC++/CLR/Class库并添加了我的C++类(下面列出的A)并构建.[我使用了默认设置,但是在项目链接器设置中我已经尝试使用"是"和"否"注册输出.]没有错误,并且创建了.DLL文件.

我创建了VisualC++/CLR/Class库并创建了包装类'Class1'我使用了所有默认设置.在项目属性下,我单击了"引用""添加新引用"并选择了第一步中创建的DLL.

我收到链接器错误:

test_NET_library.obj : error LNK2028: unresolved token (0A000009) "public: int __thiscall Z::A::m1(int,int)" (?m1@A@Z@@$$FQAEHHH@Z) referenced in function "public: int __clrcall test_NET_library::Class1::m1(int,int)" (?m1@Class1@test_NET_library@@$$FQ$AAMHHH@Z)
test_NET_library.obj : error LNK2028: unresolved token (0A00000A) "public: int __thiscall Z::A::m2(int,int)" (?m2@A@Z@@$$FQAEHHH@Z) referenced in function "public: int __clrcall test_NET_library::Class1::m2(int,int)" (?m2@Class1@test_NET_library@@$$FQ$AAMHHH@Z)
test_NET_library.obj : error LNK2019: unresolved external symbol "public: int __thiscall Z::A::m1(int,int)" (?m1@A@Z@@$$FQAEHHH@Z) referenced in function "public: int __clrcall test_NET_library::Class1::m1(int,int)" (?m1@Class1@test_NET_library@@$$FQ$AAMHHH@Z)
test_NET_library.obj : error LNK2019: unresolved external symbol "public: …
Run Code Online (Sandbox Code Playgroud)

mixed-mode c++-cli

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

在Linux中以编程方式设置自定义文件夹/目录图标

在Linux中,可以为桌面/文件管理器中显示的文件夹/目录设置自定义图标吗?

例如,对于Windows资源管理器,可以在文件夹的desktop.ini文件中设置自定义图标吗?

如果是这样,是否有一个共同的机制或API函数来执行此操作(在发行版/桌面/文件管理器中可能很常见)?

我想从一个独立的控制台模式程序C++或者使用桌面API for KDE,gnome等来实现这一点.(也是Unix CDE和OSX)

linux desktop file-manager

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

有基础科学化学/物理编程的库吗?

我想知道是否有一个用于 C++(或者可能是 C)的化学和/或物理的开源科学库?

我不是在寻找模拟模型、可视化、3D 建模。

我只是在寻找一个基本的工具箱,例如:各种常数,如理想气体常数、阿伏加德罗常数、元素值周期表;分子量计算;也许是实现化学计量、气体定律、热动力学、动力学方程的基本函数。

化学/物理101种东西。

我在 SourceForge 上找到了:

  • SourceForge 上的 Christoph Steinbeck 的化学开发工具包 (Java)。
  • NIST-常量

physics chemistry

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

逐行读取Unicode文件

在C++中逐行读取Unicode文件的正确方法是什么?

我试图通过Windows记事本读取保存为Unicode(LE)的文件.

假设文件在单独的行中仅包含字符A和B.

在逐字节读取文件时,我看到以下字节序列(十六进制):

FE FF 41 00 0D 00 0A 00 42 00 0D 00 0A 00

所以2字节BOM,2字节 'A',2字节CR,LF 2字节,2字节 'B',2字节CR,2字节LF.

我尝试使用以下代码读取文本文件:

   std::wifstream file("test.txt");
   file.seekg(2); // skip BOM
   std::wstring A_line;
   std::wstring B_line;
   getline(file,A_line);  // I get "A"
   getline(file,B_line);  // I get "\0B"
Run Code Online (Sandbox Code Playgroud)

我使用>> operator而不是getline获得相同的结果

   file >> A_line;
   file >> B_line;
Run Code Online (Sandbox Code Playgroud)

似乎单字节CR字符仅作为单字节消耗.或CR NULL LF正在消耗但不是高字节NULL.我希望文本模式中的wifstream会读取2byte CR和2byte LF.

我究竟做错了什么?为了解析新行,人们不得不在二进制模式下逐字节读取文本文件.

c++ unicode

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