我正在尝试按照xcode 7.0中的本指南为我的c ++项目设置谷歌测试框架我到了最后一步Build and Go但是在网上搜索了几个小时后我无法让我的测试项目运行.编译器似乎找不到它需要的头文件.main.cpp:9:10:找不到'gtest/gtest.h'文件.来源是:
#include "gtest/gtest.h"
#include "calc.hpp"
int main(int argc, const char * argv[]) {
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我也试过#include <gtest/gtest.h>同样的结果.
当value设置为empty时,我可以阻止TStringList删除键值对吗?我使用的Delphi XE8和Lazarus的工作方式不同.我希望将该对保留在TStringlist对象中,即使该值设置为空字符串也是如此.例如:
procedure TMyClass.Set(const Key, Value: String);
begin
// FData is a TStringList object
FData.Values[Key] := Value; // Removes pair when value is empty. Count decreases and Key is lost.
end;
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,当我使用Delphi编译时,删除了具有空值的对,之后我不知道是一个未设置密钥的值,或者它是否显式设置为空字符串.此外,我无法获得所有已使用的密钥.现在我需要持有另一个包含空信息的密钥集合.
MyKeyValues.Set('foo', 'bar'); // Delphi FData.Count = 1; Lazarus FData.Count = 1
MyKeyValues.Set('foo', ''); // Delphi FData.Count = 0; Lazarus FData.Count = 1
Run Code Online (Sandbox Code Playgroud) 为什么这段代码不会导致编译错误?我本来期望错误,例如'对"CallMe"的模糊调用.这是编译器或语言中的错误吗?这可以通过使用单元名称和函数调用前面的点来解决,但这不会屏蔽用户代码和库代码以防止名称冲突.你认为你的代码做了一些事情,但它做了别的事情,这很糟糕.
uses
Unit2, Unit3;
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(CallMe(5)));
end;
unit Unit2;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
function CallMe(A: Integer) : Integer;
implementation
function CallMe(A: Integer) : Integer;
begin
Result := A * 2;
end;
end.
unit Unit3;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
function CallMe(A: Integer) : Integer;
implementation
function CallMe(A: Integer) : Integer;
begin
Result := A * -1;
end;
end.
Run Code Online (Sandbox Code Playgroud) 我在 PR 评论中注意到一个未使用的变量,我们想知道为什么编译器没有捕获它。因此,我使用 godbolt 使用一堆未使用的变量测试了以下代码,令我惊讶的是有些被报告为未使用,但其他则没有。尽管全部都没有使用过。
#include <string>
struct Index
{
Index(int index) : m_index(index) {}
int m_index;
};
int main()
{
std::string str = "hello"; // case 1. no warning here - unexpected
int someValue = 2; // case 2. warning - as expected
const int someConstant = 2; // case 3. warning - as expected
Index index1(2); // case 4. just as equally not used but no warning - unexpected
// here using the assignment but do get a …Run Code Online (Sandbox Code Playgroud)