在我的控制台应用程序中,我使用的是stl map.当我使用visual studio 2012进行编译时,我收到的错误是在编译期间找不到映射.
Error 1 error LNK2001: unresolved external symbol "private: static class std::map<int,int,struct std::less<int>,class std::allocator<struct std::pair<int const ,int> > > m_headerDataMap" (?m_headerDataMap@FileHeader@@0V?$map@HHU?$less@H@std@@V?$allocator@U?$pair@$$CBHH@std@@@2@@std@@A) c:\Users\m\documents\visual studio 2012\Projects\FileReader\FileReader\FileReader.obj FileReader
Run Code Online (Sandbox Code Playgroud)
我应该为项目添加一个库吗?如果是的话,哪一个以及如何.
我将地图定义如下:
static map<int, int> m_headerDataMap;
Run Code Online (Sandbox Code Playgroud) 我有几个类都实现了一个接口:
interface ISample
{
}
class A:ISample
{
}
class B:ISample
{
}
class C:ISample
{
}
Run Code Online (Sandbox Code Playgroud)
和另一个基于某些情况创建它们的类,例如:
class CreateISample
{
ISample Create(string situation )
{
switch(situation )
{
case "create A":
return new A();
case "Create B":
return new B();
case "Create C":
return new C();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这门课最好的名字是什么?
创建ISample并不好,因为我有:
CreateISample.Create("Create A");
Run Code Online (Sandbox Code Playgroud)
其中有两个Create作为名称的一部分.此外,CreateISample可以执行其他一些操作(例如,保存一些与所有实例相关的常量值,或者保存已创建实例的列表等).然后CreateISample不是一个好名字.
这有什么标准吗?我记得我读过一本关于设计模式的书,他们为这个工厂模式提出了一个合适的名称.
我有这个xaml:
<Canvas cal:View.Context="DrawCanvas">
<!--<Line X1="1" Y1="1" X2="400" Y2="400" Stroke="Black" StrokeThickness="20" IsHitTestVisible="False"/>-->
</Canvas>
Run Code Online (Sandbox Code Playgroud)
在模型中我有:
public Canvas DrawCanvas { get; set; }
public ImageSourceViewModel()
{
this.PropertyChanged += this.ImageSourceViewModel_PropertyChanged;
this.Scale = 1;
this.TranslateX = 0;
this.TranslateY = 0;
DrawCanvas=new Canvas();
var line = new Line();
line.X1= 1;
line.Y1 = 1;
line.X2 = 100;
line.Y2 = 10;
line.Stroke=new SolidColorBrush(Colors.Green);
line.StrokeThickness = 2;
line.Visibility=Visibility.Visible;
DrawCanvas.Children.Add(line);
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Caliburn Micro.
它不会在输出上绘制任何行.
这个问题可能有两个原因:
1-视图中的画布未绑定到ViewModel中的DrawCanvas.
2-绘图代码不正确.
如何检查我的视图画布是否实际绑定到ViewModel中的DrawCanvas?绑定的语法是否正确?我正在使用Caliburn Micro.
如果绑定是正确的,那么绘制代码的问题是什么呢?
我有这个界面(简化)
public interface IImageSourceViewModel : INotifyPropertyChanged
{
/// <summary>
/// Gets or sets the lines view model.
/// </summary>
IObservableCollection<ILine> LinesViewModel { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有这个:
public class LineViewModel : PropertyChangedBase, ILine
{
}
Run Code Online (Sandbox Code Playgroud)
我实现了如下界面(简体):
public class ImageSourceViewModel : IImageSourceViewModel
{
public IObservableCollection<LineViewModel> LinesViewModel { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但我得到错误,实现中的LinesViewModel无法在接口中实现LinesViewModel,因为它具有不同的返回类型.
我怎样才能解决这个问题?
我知道我可以使用信号量或互斥量和...,但我想知道如果我在一个线程中写入变量并在另一个线程中读取它是否有任何问题?像这样的东西:
#include <iostream>
#include <thread>
volatile int value=0;
int main()
{
auto workerThread = new std::thread([&]()
{
for(int i=0;i<10000;++i)
{
value=i;
std::this_thread::sleep_for(std::chrono::milliseconds(i*100));
}
}
);
while(true)
{
std::cout<<value<<std::endl;
if(value >1000) break;
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
}
Run Code Online (Sandbox Code Playgroud)
它是一种安全的应用而且没有气味吗?
没有任何复杂性,我可以改进吗?
我有一个持有int32_t的向量,我正在使用Windows 64位.我需要将它转换为int数组.
因为在我的特定平台上int32_t和int本质上是相同的类型,我可以这样做:(假设该数组有足够的空间来容纳来自vector的所有数据)
int out[1000]; //assuming that in has less data than 1000
std::vector<int32_t> in=getdata();
memcpy(out,&int[0],in.size());
Run Code Online (Sandbox Code Playgroud)
但它适用于平台,uint32_t和int本质上是相同的类型.
这样做的最佳方法是什么,以确保它是独立于平台的,并且可以在任何平台上工作,例如int不是32位?
我有一个使用OpenCV 3 Beta构建的应用程序.我刚下载并尝试使用OpenCV 3 RC1,现在我收到以下链接器错误:
Error 1 error LNK2019: unresolved external symbol "int __cdecl cv::hal::normHamming(unsigned char const *,int)" (?normHamming@hal@cv@@YAHPEBEH@Z) referenced in function "double __cdecl cv::norm(class cv::_InputArray const &,int,class cv::_InputArray const &)" (?norm@cv@@YANAEBV_InputArray@1@H0@Z))
Run Code Online (Sandbox Code Playgroud)
我知道这个错误意味着什么以及如何链接到库,但我不确定我需要更改哪些库来匹配升级.OpenCV 3 Beta和RC1之间的变化打破了我的应用程序,我该如何解决?