这里的例子没有意义,但这基本上是我用Python编写程序的方式,现在我用C++重写它.我仍然试图在C++中掌握多重继承,我需要做的是从main到C的实例访问A :: a_print.下面你会看到我在说什么.这可能吗?
#include <iostream>
using namespace std;
class A {
public:
void a_print(const char *str) { cout << str << endl; }
};
class B: virtual A {
public:
void b_print() { a_print("B"); }
};
class C: virtual A, public B {
public:
void c_print() { a_print("C"); }
};
int main() {
C c;
c.a_print("A"); // Doesn't work
c.b_print();
c.c_print();
}
Run Code Online (Sandbox Code Playgroud)
这是编译错误.
test.cpp: In function ‘int main()’:
test.cpp:6: error: ‘void A::a_print(const char*)’ is inaccessible
test.cpp:21: error: within this context …Run Code Online (Sandbox Code Playgroud) 在C中是否有可移植的方法来在编译时找出位字段的掩码?
理想情况下,我希望能够原子地清除这样的字段:
struct Reference {
unsigned age : 3;
unsigned marked : 1;
unsigned references : 4;
};
struct Reference myRef;
__sync_and_and_fetch(&myRef, age, ~AGE_MASK);
Run Code Online (Sandbox Code Playgroud)
否则我必须取消对结构的锁定,这比我想要的更重.
我正在使用Ruby的CSV库来解析一些CSV.我有一个看似格式正确的CSV文件,我通过将Excel文件导出为CSV来创建.
然而CSV.open(filename, 'r')导致一个CSV::IllegalFormatError.
文件中没有流氓逗号或引号,也没有任何我可以看到可能导致问题的内容.
我怀疑这个问题可能与行结尾有关.我能够解析通过文本编辑器(Aquamacs)手动输入的数据.就在我尝试从Excel(OS X)导出的数据时,会出现问题.当我在vim中打开导出的CSV时,所有文本都显示在一行上,并^M显示在行之间.
从文档中,似乎可以提供open行分隔符; 但我不确定在这种情况下应该是什么.
我想发布我的桌面Mac OS X Cocoa应用程序的单个 32/64位通用二进制文件.我不想发两个版本.
我希望它在Snow Leopard上作为64位进程运行.
但是,如果应用程序是在Leopard上启动的,我想总是强制它以32位进程运行.
注意:我知道在Finder的"获取信息"窗口中,您可以单击"在32位模式下打开"复选框来实现此目的.这很好,但我真正想要的是一种自动的方式,总是只在Leopard上强制这种行为.在Snow Leopard上,应用程序应该运行64位,除非用户想要更改上述设置.
可以这样做吗?如果是这样,怎么样?谢谢.
在D2010(unicode)中是否有类似Pos的类似功能不区分大小写?
我知道我可以使用Pos(AnsiUpperCase(FindString),AnsiUpperCase(SourceString))但是每次调用函数时都会通过将字符串转换为大写来增加处理时间.
例如,在1000000循环上,Pos需要78ms而转换为大写需要764ms.
str1 := 'dfkfkL%&/s"#<.676505';
for i := 0 to 1000000 do
PosEx('#<.', str1, 1); // Takes 78ms
for i := 0 to 1000000 do
PosEx(AnsiUpperCase('#<.'), AnsiUpperCase(str1), 1); // Takes 764ms
Run Code Online (Sandbox Code Playgroud)
我知道为了提高这个特定示例的性能,我可以在循环之前将字符串首先转换为大写,但我之所以想要具有不区分大小写的Pos函数的原因是从FastStrings中替换一个.我将使用Pos的所有字符串都将不同,因此我需要将每个字符串转换为大写字母.
是否有任何其他功能可能比Pos +将字符串转换为大写更快?
1.关于PMD:
1.1如何设置PMD检查,忽略其中的一些,例如"变量名太短或太长","删除空构造函数等" - 如果我这样做,会出现另一个警告,说该类必须有一些静态的方法.基本上,这个课程是空的,以便以后开发,我现在想把它留下来.
1.2遵循此警告建议是否必要?
A class which only has private constructors should be final
Run Code Online (Sandbox Code Playgroud)
1.3那是什么意思?
The class 'Dog' has a Cyclomatic Complexity of 3 (Highest = 17)
Run Code Online (Sandbox Code Playgroud)
1.4这个怎么样?我很乐意改变这一点,但目前关于变化的事情并没有让我想到:
Assigning an Object to null is a code smell. Consider refactoring.
Run Code Online (Sandbox Code Playgroud)
2.关于FindBugs:
2.1写入静态字段是否真的那么糟糕,比它的声明要晚一些?以下代码给了我一个警告:
Main.appCalendar = Calendar.getInstance();
Main.appCalendar.setTimeInMillis(System.currentTimeMillis());
Run Code Online (Sandbox Code Playgroud)
哪里appCalendar是静态变量.
2.2此代码:
strLine = objBRdr.readLine().trim();
Run Code Online (Sandbox Code Playgroud)
发出警告:
Immediate dereference of the result of readLine()
Run Code Online (Sandbox Code Playgroud)
这里objBRdr是一个BufferedReader(FileReader).怎么会发生什么?readLine()可能是空的?代码嵌套在while (objBRdr.ready())测试中,到目前为止,我没有问题.
当我用以下代码替换代码时,Update1:2.2被修复了:
strLine = objBRdr.readLine();
if (strLine != null) { …Run Code Online (Sandbox Code Playgroud) 我想我在这里遗漏了一些东西.我有一个这样的目录:
myapp
|-lib
|-package1
|-dostuff.rb
|-package2
|-dostuff.rb
从一个irb控制台我想测试库之前,我把它添加到我的实际项目(一个Rails应用程序).但是,输入以下内容:
require 'lib/package1/dostuff'
Run Code Online (Sandbox Code Playgroud)
返回错误,说它无法找到要加载的文件.我将lib目录添加到加载路径但我无法加载该文件.
我忘记了什么?这两个文件名不必相同,但它们是如何开始的(它们是从我需要使用soap4r调用的一些Web服务自动生成的;每个包代表一个不同的Web服务API组)
我在regexp上非常糟糕,但我正试图some/path/image.jpg摆脱http://somepage.com/some/...etc并尝试这种方法:
function removeDomain($string) {
return preg_replace("/http:\/\/.*\//", "", $string);
}
Run Code Online (Sandbox Code Playgroud)
它不起作用 - 据我所知它只是返回一个空白字符串.我该如何写这个正则表达式?
反正有没有像PHP这样的东西
print << END
yadayadayada
END;
Run Code Online (Sandbox Code Playgroud)
在C++中?(多线,非转义,易于切割和粘贴的流插入)