user1277070 user1277070 - 8 days ago 6
C# Question

C# error : An object reference is required for the non-static field, method, or property

I have 2 classes one for defining the algorithm parameters and other to implement the algorithm:

Class 1 (Algorithm Parameters):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace VM_Placement
{
public static class AlgorithmParameters
{
public static int pop_size = 100;
public static double crossover_rate = 0.7;
public static double mutation_rate = 0.001;

public static int chromo_length = 300;
public static int gene_length = 4;
public static int max_allowable_generations = 400;

static Random rand = new Random();
public static double random_num = rand.NextDouble();

}
}


Class 2 (Implement algorithm):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace VM_Placement
{
public class Program
{
public struct chromo_typ
{
public string bits;
public float fitness;

//public chromo_typ(){
// bits = "";
// fitness = 0.0f;
//}
chromo_typ(string bts, float ftns)
{
bits = bts;
fitness = ftns;
}
};

public static int GetRandomSeed()
{
byte[] bytes = new byte[4];
System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();
rng.GetBytes(bytes);
return BitConverter.ToInt32(bytes, 0);
}

public string GetRandomBits()
{
string bits="";

for (int i = 0; i < VM_Placement.AlgorithmParameters.chromo_length; i++)
{
if (VM_Placement.AlgorithmParameters.random_num > 0.5f)

bits += "1";

else

bits += "0";
}

return bits;
}


public static void Main(string[] args)
{
Random rnd = new Random(GetRandomSeed());

while (true)
{
chromo_typ[] Population = new chromo_typ[VM_Placement.AlgorithmParameters.pop_size];
double Target;

Console.WriteLine("\n Input a target number");
Target = Convert.ToDouble(Console.ReadLine());

for (int i = 0; i < VM_Placement.AlgorithmParameters.pop_size; i++)
{
Population[i].bits = GetRandomBits();
Population[i].fitness = 0.0f;
}
}
}
}
}


Getting error on "Population[i].bits = GetRandomBits();" in main().

Error is:


An object reference is required for the non-static field, method, or property 'VM_Placement.Program.GetRandomBits()'


Am I missing anything?

Answer

Main method is Static. You can not invoke a non static method from a static method.

GetRandomBits()

is not a static method. Either you have to create an instance of Program

Program p = new Program();
p.GetRandomBits();

or make

GetRandomBits() static.